UNPKG

@winglet/react-utils

Version:

React utility library providing custom hooks, higher-order components (HOCs), and utility functions to enhance React application development with improved reusability and functionality

41 lines (37 loc) 1.21 kB
'use strict'; var react = require('react'); var useHandle = require('./useHandle.cjs'); var useTimeout = require('./useTimeout.cjs'); const useDebounce = (callback, dependencyList, ms, options) => { const optionsRef = react.useRef({ immediate: options?.immediate ?? true }); const isScheduled = react.useRef(false); const handleCallback = useHandle.useHandle(callback); const debouncedCallback = useHandle.useHandle(() => { if (optionsRef.current.immediate) { if (isScheduled.current) { isScheduled.current = false; handleCallback(); } } else handleCallback(); }); const { isIdle, schedule, cancel } = useTimeout.useTimeout(debouncedCallback, ms); react.useEffect(() => { if (optionsRef.current.immediate) { if (isIdle()) { handleCallback(); isScheduled.current = false; } else isScheduled.current = true; } schedule(); }, dependencyList); react.useEffect(() => cancel, [cancel]); return { isIdle, cancel, }; }; exports.useDebounce = useDebounce;