@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
45 lines (44 loc) • 1.09 kB
JavaScript
"use client";
import { useEffect, useRef, useState } from "react";
//#region packages/@mantine/hooks/src/use-idle/use-idle.ts
const DEFAULT_OPTIONS = {
events: [
"keydown",
"mousemove",
"touchmove",
"click",
"scroll",
"wheel"
],
initialState: true
};
function useIdle(timeout, options) {
const { events, initialState } = {
...DEFAULT_OPTIONS,
...options
};
const [idle, setIdle] = useState(initialState);
const timer = useRef(-1);
useEffect(() => {
const handleEvents = () => {
setIdle(false);
if (timer.current) window.clearTimeout(timer.current);
timer.current = window.setTimeout(() => {
setIdle(true);
}, timeout);
};
events.forEach((event) => document.addEventListener(event, handleEvents));
timer.current = window.setTimeout(() => {
setIdle(true);
}, timeout);
return () => {
events.forEach((event) => document.removeEventListener(event, handleEvents));
window.clearTimeout(timer.current);
timer.current = -1;
};
}, [timeout]);
return idle;
}
//#endregion
export { useIdle };
//# sourceMappingURL=use-idle.mjs.map