@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
1 lines • 2.09 kB
Source Map (JSON)
{"version":3,"file":"use-idle.mjs","names":[],"sources":["../../src/use-idle/use-idle.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport interface UseIdleOptions {\n events?: (keyof DocumentEventMap)[];\n initialState?: boolean;\n}\n\nconst DEFAULT_OPTIONS: Required<UseIdleOptions> = {\n events: ['keydown', 'mousemove', 'touchmove', 'click', 'scroll', 'wheel'],\n initialState: true,\n};\n\nexport function useIdle(timeout: number, options?: UseIdleOptions) {\n const { events, initialState } = { ...DEFAULT_OPTIONS, ...options };\n const [idle, setIdle] = useState(initialState);\n const timer = useRef(-1);\n\n useEffect(() => {\n const handleEvents = () => {\n setIdle(false);\n\n if (timer.current) {\n window.clearTimeout(timer.current);\n }\n\n timer.current = window.setTimeout(() => {\n setIdle(true);\n }, timeout);\n };\n\n events.forEach((event) => document.addEventListener(event, handleEvents));\n\n // Start the timer immediately instead of waiting for the first event to happen\n timer.current = window.setTimeout(() => {\n setIdle(true);\n }, timeout);\n\n return () => {\n events.forEach((event) => document.removeEventListener(event, handleEvents));\n window.clearTimeout(timer.current);\n timer.current = -1;\n };\n }, [timeout]);\n\n return idle;\n}\n\nexport namespace useIdle {\n export type Options = UseIdleOptions;\n}\n"],"mappings":";;;AAOA,MAAM,kBAA4C;CAChD,QAAQ;EAAC;EAAW;EAAa;EAAa;EAAS;EAAU;EAAQ;CACzE,cAAc;CACf;AAED,SAAgB,QAAQ,SAAiB,SAA0B;CACjE,MAAM,EAAE,QAAQ,iBAAiB;EAAE,GAAG;EAAiB,GAAG;EAAS;CACnE,MAAM,CAAC,MAAM,WAAW,SAAS,aAAa;CAC9C,MAAM,QAAQ,OAAO,GAAG;AAExB,iBAAgB;EACd,MAAM,qBAAqB;AACzB,WAAQ,MAAM;AAEd,OAAI,MAAM,QACR,QAAO,aAAa,MAAM,QAAQ;AAGpC,SAAM,UAAU,OAAO,iBAAiB;AACtC,YAAQ,KAAK;MACZ,QAAQ;;AAGb,SAAO,SAAS,UAAU,SAAS,iBAAiB,OAAO,aAAa,CAAC;AAGzE,QAAM,UAAU,OAAO,iBAAiB;AACtC,WAAQ,KAAK;KACZ,QAAQ;AAEX,eAAa;AACX,UAAO,SAAS,UAAU,SAAS,oBAAoB,OAAO,aAAa,CAAC;AAC5E,UAAO,aAAa,MAAM,QAAQ;AAClC,SAAM,UAAU;;IAEjB,CAAC,QAAQ,CAAC;AAEb,QAAO"}