@modern-kit/react
Version:
41 lines (36 loc) • 1.22 kB
JavaScript
;
var React = require('react');
var hooksUsePreservedCallback = require('../usePreservedCallback/index.cjs');
var utils = require('@modern-kit/utils');
const getIntervalOptions = (options) => {
return utils.isNumber(options) ? { delay: options, enabled: true } : {
delay: options.delay,
enabled: options?.enabled ?? true
};
};
function useInterval(callback, options) {
const intervalRef = React.useRef();
const preservedCallback = hooksUsePreservedCallback.usePreservedCallback(callback);
const { delay, enabled } = getIntervalOptions(options);
const set = React.useCallback(() => {
intervalRef.current = window.setInterval(preservedCallback, delay);
}, [preservedCallback, delay]);
const clear = React.useCallback(() => {
if (intervalRef.current) {
clearInterval(intervalRef.current);
intervalRef.current = null;
}
}, []);
const reset = React.useCallback(() => {
clear();
set();
}, [clear, set]);
React.useEffect(() => {
if (delay < 0 || !enabled) return;
set();
return () => clear();
}, [clear, set, enabled, delay]);
return { set, reset, clear };
}
exports.useInterval = useInterval;
//# sourceMappingURL=index.cjs.map