UNPKG

@modern-kit/react

Version:
40 lines (37 loc) 1.33 kB
import { useState } from 'react'; import { useEventListener } from '../useEventListener/index.mjs'; import { useTimeout } from '../useTimeout/index.mjs'; import { useVisibilityChange } from '../useVisibilityChange/index.mjs'; import { useThrottle } from '../useThrottle/index.mjs'; import '../usePreservedCallback/index.mjs'; import '../useIsomorphicLayoutEffect/index.mjs'; import '@modern-kit/utils'; import '../useUnmount/index.mjs'; function useIdle({ timeout, onIdle, onActive }) { const [isIdle, setIsIdle] = useState(false); const { reset: resetTimer } = useTimeout(() => { setIsIdle(true); onIdle?.(); }, timeout); const handleActive = useThrottle( () => { if (isIdle) { setIsIdle(false); onActive?.(); } resetTimer(); }, 500, { trailing: false } ); const windowElement = typeof window !== "undefined" ? window : null; useEventListener(windowElement, "pointermove", handleActive); useEventListener(windowElement, "pointerdown", handleActive); useEventListener(windowElement, "resize", handleActive); useEventListener(windowElement, "keydown", handleActive); useEventListener(windowElement, "wheel", handleActive); useVisibilityChange({ onShow: handleActive }); return isIdle; } export { useIdle }; //# sourceMappingURL=index.mjs.map