import throttle from 'lodash.throttle'; import { useRef } from 'react'; import { useCreation } from '..'; import { ThrottleOptions } from '../useThrottle/throttleOptions'; type Fn = (...args: any) => any; interface ReturnValue { run: T; cancel: () => void; } function useThrottleFn(fn: T, options?: ThrottleOptions): ReturnValue { const fnRef = useRef(fn); fnRef.current = fn; const wait = options?.wait ?? 1000; const throttled = useCreation( () => throttle( (...args: any) => { fnRef.current(...args); }, wait, options, ), [], ); return { run: (throttled as any) as T, cancel: throttled.cancel, }; } export default useThrottleFn;