UNPKG

react-hook-granth

Version:

A collection of custom React hooks for efficient state management and UI logic.

34 lines (25 loc) 828 B
import { useEffect, useState } from "react"; /** * Detect if user is idle after a given timeout. * @param {number} timeout - in milliseconds * @returns {boolean} - true if idle */ export default function useIdle(timeout = 3000) { const [idle, setIdle] = useState(false); useEffect(() => { let timer = null; const reset = () => { clearTimeout(timer); setIdle(false); timer = setTimeout(() => setIdle(true), timeout); }; const events = ["mousemove", "mousedown", "keydown", "scroll", "touchstart"]; events.forEach((e) => window.addEventListener(e, reset)); reset(); // start the timer return () => { clearTimeout(timer); events.forEach((e) => window.removeEventListener(e, reset)); }; }, [timeout]); return idle; }