UNPKG

@modern-kit/react

Version:
42 lines (38 loc) 1.54 kB
'use strict'; var React = require('react'); var hooksUseEventListener = require('../useEventListener/index.cjs'); var hooksUseTimeout = require('../useTimeout/index.cjs'); var hooksUseVisibilityChange = require('../useVisibilityChange/index.cjs'); var hooksUseThrottle = require('../useThrottle/index.cjs'); require('../usePreservedCallback/index.cjs'); require('../useIsomorphicLayoutEffect/index.cjs'); require('@modern-kit/utils'); require('../useUnmount/index.cjs'); function useIdle({ timeout, onIdle, onActive }) { const [isIdle, setIsIdle] = React.useState(false); const { reset: resetTimer } = hooksUseTimeout.useTimeout(() => { setIsIdle(true); onIdle?.(); }, timeout); const handleActive = hooksUseThrottle.useThrottle( () => { if (isIdle) { setIsIdle(false); onActive?.(); } resetTimer(); }, 500, { trailing: false } ); const windowElement = typeof window !== "undefined" ? window : null; hooksUseEventListener.useEventListener(windowElement, "pointermove", handleActive); hooksUseEventListener.useEventListener(windowElement, "pointerdown", handleActive); hooksUseEventListener.useEventListener(windowElement, "resize", handleActive); hooksUseEventListener.useEventListener(windowElement, "keydown", handleActive); hooksUseEventListener.useEventListener(windowElement, "wheel", handleActive); hooksUseVisibilityChange.useVisibilityChange({ onShow: handleActive }); return isIdle; } exports.useIdle = useIdle; //# sourceMappingURL=index.cjs.map