UNPKG

@storm-stack/hooks

Version:

A collection of React hooks used by Storm Software in various client libraries and applications.

47 lines (46 loc) 1.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useIdle = void 0; var _throttle = require("@storm-stack/utilities/helper-fns/throttle"); var _react = require("react"); const useIdle = (ms = 1e3 * 60) => { const [idle, setIdle] = (0, _react.useState)(false); (0, _react.useEffect)(() => { let timeoutId = -1; const handleTimeout = () => { setIdle(true); }; const handleEvent = (0, _throttle.throttle)(() => { setIdle(false); window.clearTimeout(timeoutId); timeoutId = window.setTimeout(handleTimeout, ms); }, 500); const handleVisibilityChange = () => { if (!document.hidden) { handleEvent(); } }; timeoutId = window.setTimeout(handleTimeout, ms); window.addEventListener("mousemove", handleEvent); window.addEventListener("mousedown", handleEvent); window.addEventListener("resize", handleEvent); window.addEventListener("keydown", handleEvent); window.addEventListener("touchstart", handleEvent); window.addEventListener("wheel", handleEvent); document.addEventListener("visibilitychange", handleVisibilityChange); return () => { window.removeEventListener("mousemove", handleEvent); window.removeEventListener("mousedown", handleEvent); window.removeEventListener("resize", handleEvent); window.removeEventListener("keydown", handleEvent); window.removeEventListener("touchstart", handleEvent); window.removeEventListener("wheel", handleEvent); document.removeEventListener("visibilitychange", handleVisibilityChange); window.clearTimeout(timeoutId); }; }, [ms]); return idle; }; exports.useIdle = useIdle;