import { useRef, useCallback } from 'react';

export type useDebounceArgs = {
  callback: (...args) => void;
  timer: number;
};

export function useDebounce({ callback, timer }: useDebounceArgs) {
  const timeoutRef = useRef(null);

  return useCallback(
    (...args) => {
      if (timeoutRef.current) {
        clearTimeout(timeoutRef.current);
      }
      timeoutRef.current = setTimeout(() => {
        callback(...args);
      }, timer);
    },
    [callback, timer, timeoutRef]
  );
}
