import { useRef, useCallback } from 'react'; export const useThrottle = void>( callback: T, delay: number, ): ((...args: Parameters) => void) => { const lastRan = useRef(Date.now()); const timeoutRef = useRef(null); return useCallback( (...args: Parameters) => { const handler = () => { if (Date.now() - lastRan.current >= delay) { callback(...args); lastRan.current = Date.now(); } else { if (timeoutRef.current) { clearTimeout(timeoutRef.current); } timeoutRef.current = setTimeout(() => { callback(...args); lastRan.current = Date.now(); }, delay - (Date.now() - lastRan.current)); } }; handler(); }, [callback, delay], ); };