UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

45 lines (44 loc) 1.09 kB
"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