@modern-kit/react
Version:
41 lines (36 loc) • 1.18 kB
JavaScript
;
var React = require('react');
var hooksUsePreservedCallback = require('../usePreservedCallback/index.cjs');
var utils = require('@modern-kit/utils');
const getTimeoutOptions = (options) => {
return utils.isNumber(options) ? { delay: options, enabled: true } : {
delay: options.delay,
enabled: options?.enabled ?? true
};
};
function useTimeout(callback, options) {
const timeoutRef = React.useRef();
const callbackAction = hooksUsePreservedCallback.usePreservedCallback(callback);
const { delay, enabled } = getTimeoutOptions(options);
const set = React.useCallback(() => {
timeoutRef.current = window.setTimeout(callbackAction, delay);
}, [callbackAction, delay]);
const clear = React.useCallback(() => {
if (timeoutRef.current) {
clearTimeout(timeoutRef.current);
timeoutRef.current = null;
}
}, []);
const reset = React.useCallback(() => {
clear();
set();
}, [clear, set]);
React.useEffect(() => {
if (!enabled) return;
set();
return () => clear();
}, [set, clear, enabled]);
return { set, reset, clear };
}
exports.useTimeout = useTimeout;
//# sourceMappingURL=index.cjs.map