import { useCallback, useRef } from "react"; export const useDebounceCallback = any>( callback: T, delay: number = 300 ) => { const timeoutRef = useRef(null); const clear = useCallback(() => { if (timeoutRef.current) { clearTimeout(timeoutRef.current); } }, []); const fn = useCallback( (...args: Parameters) => { clear(); timeoutRef.current = setTimeout(() => { timeoutRef.current = null; callback(...args); }, delay); }, [delay, clear] ); return fn; };