UNPKG

@modern-kit/react

Version:
41 lines (36 loc) 1.22 kB
'use strict'; 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