import React from "react"; export default function useDebounce void>( callback: T, delay: number, ) { const timeoutRef = React.useRef(null); const debouncedFunction = React.useCallback( (...args: Parameters) => { if (timeoutRef.current) { clearTimeout(timeoutRef.current); } timeoutRef.current = setTimeout(() => { callback(...args); }, delay); }, [callback, delay], ); // Cleanup on unmount React.useEffect(() => { return () => { if (timeoutRef.current) { clearTimeout(timeoutRef.current); } }; }, []); return debouncedFunction; }