UNPKG

@modern-kit/react

Version:
39 lines (35 loc) 1.16 kB
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