@modern-kit/react
Version:
40 lines (37 loc) • 1.33 kB
JavaScript
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