import { useCallback, useEffect, useRef } from "react"; export function useDebounceCallback( callback: (...args: Args) => void, delay = 500, ) { const timerRef = useRef | null>(null); const debounced = useCallback( (...args: Args) => { if (timerRef.current) { clearTimeout(timerRef.current); } timerRef.current = setTimeout(() => { callback(...args); }, delay); }, [callback, delay], ); useEffect(() => { return () => { if (timerRef.current) clearTimeout(timerRef.current); }; }, []); return debounced; }