@modern-kit/react
Version:
42 lines (38 loc) • 1.54 kB
JavaScript
;
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