remix-utils-rt
Version:
This package contains simple utility functions to use with [React Router](https://reactrouter.com/home).
28 lines • 1.05 kB
JavaScript
import { useCallback, useEffect, useRef } from "react";
import { useFetcher } from "react-router";
export function useDebounceFetcher() {
let timeoutRef = useRef();
useEffect(() => {
// no initialize step required since timeoutRef defaults undefined
let timeout = timeoutRef.current;
return () => {
if (timeout)
clearTimeout(timeout);
};
}, []);
let fetcher = useFetcher();
// Clone the original submit to avoid a recursive loop
const originalSubmit = fetcher.submit;
fetcher.submit = useCallback((target, { debounceTimeout = 0, ...options } = {}) => {
if (timeoutRef.current)
clearTimeout(timeoutRef.current);
if (!debounceTimeout || debounceTimeout <= 0) {
return originalSubmit(target, options);
}
timeoutRef.current = setTimeout(() => {
originalSubmit(target, options);
}, debounceTimeout);
}, [originalSubmit]);
return fetcher;
}
//# sourceMappingURL=use-debounce-fetcher.js.map