react-activity-detector
Version:
React Activity Detector. Detects if the user is active or idle, also includes Cross-Tab functionality
1 lines • 1.37 kB
JavaScript
(()=>{"use strict";var e={d:(t,o)=>{for(var r in o)e.o(o,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:o[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>l});const o=require("react"),r=["click","mousemove","keydown","DOMMouseScroll","mousewheel","mousedown","touchstart","touchmove","focus"],n="React_Activity_Detector_Idle_Timer",a=()=>(new Date).getTime();let i={},c={};const l=e=>{const{activityEvents:t,timeout:l,enabled:u,onIdle:s,onActive:d,name:m}={activityEvents:r,timeout:3e5,enabled:!1,name:"default",...e},[v,f]=(0,o.useState)(!1),w=e=>{clearTimeout(i[m]),i[m]=setTimeout((()=>{const e=(e=>localStorage.getItem(n+"-"+e))(m);a()>=e&&s&&s()}),e)},y=()=>{clearTimeout(c[m]),c[m]=setTimeout((()=>f(!1)),200),d&&d()},g=({key:e,newValue:t})=>{e===n+"-"+m&&w(t-a())};return(0,o.useEffect)((()=>(u&&(t.forEach((e=>window.addEventListener(e,y))),window.addEventListener("storage",g),f(!1)),()=>{t.forEach((e=>window.removeEventListener(e,y))),window.removeEventListener("storage",g),clearTimeout(i[m]),clearTimeout(c[m])})),[u]),(0,o.useEffect)((()=>{v||(w(l),((e,t)=>{localStorage.setItem(n+"-"+t,e)})(a()+l,m)),f(!0)}),[v,l]),v};module.exports=t})();