UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

45 lines (41 loc) 1.3 kB
'use client'; 'use strict'; var React = require('react'); var useCallbackRef = require('../use-callback-ref/use-callback-ref.cjs'); const noop = () => { }; function useDebouncedCallback(callback, options) { const delay = typeof options === "number" ? options : options.delay; const flushOnUnmount = typeof options === "number" ? false : options.flushOnUnmount; const handleCallback = useCallbackRef.useCallbackRef(callback); const debounceTimerRef = React.useRef(0); const lastCallback = Object.assign( React.useCallback( (...args) => { window.clearTimeout(debounceTimerRef.current); const flush = () => { if (debounceTimerRef.current !== 0) { debounceTimerRef.current = 0; handleCallback(...args); } }; lastCallback.flush = flush; debounceTimerRef.current = window.setTimeout(flush, delay); }, [handleCallback, delay] ), { flush: noop } ); React.useEffect( () => () => { window.clearTimeout(debounceTimerRef.current); if (flushOnUnmount) { lastCallback.flush(); } }, [lastCallback, flushOnUnmount] ); return lastCallback; } exports.useDebouncedCallback = useDebouncedCallback; //# sourceMappingURL=use-debounced-callback.cjs.map