UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

37 lines (34 loc) 1.07 kB
'use client'; import { useState, useRef, useEffect } from 'react'; 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; } export { useIdle }; //# sourceMappingURL=use-idle.mjs.map