@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
JavaScript
;
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;