@modern-kit/react
Version:
39 lines (35 loc) • 1.16 kB
JavaScript
import { useRef, useCallback, useEffect } from 'react';
import { usePreservedCallback } from '../usePreservedCallback/index.mjs';
import { isNumber } from '@modern-kit/utils';
const getIntervalOptions = (options) => {
return isNumber(options) ? { delay: options, enabled: true } : {
delay: options.delay,
enabled: options?.enabled ?? true
};
};
function useInterval(callback, options) {
const intervalRef = useRef();
const preservedCallback = usePreservedCallback(callback);
const { delay, enabled } = getIntervalOptions(options);
const set = useCallback(() => {
intervalRef.current = window.setInterval(preservedCallback, delay);
}, [preservedCallback, delay]);
const clear = useCallback(() => {
if (intervalRef.current) {
clearInterval(intervalRef.current);
intervalRef.current = null;
}
}, []);
const reset = useCallback(() => {
clear();
set();
}, [clear, set]);
useEffect(() => {
if (delay < 0 || !enabled) return;
set();
return () => clear();
}, [clear, set, enabled, delay]);
return { set, reset, clear };
}
export { useInterval };
//# sourceMappingURL=index.mjs.map