33 lines
858 B
JavaScript
33 lines
858 B
JavaScript
import { useRef, useCallback } from 'react';
|
|
|
|
export function useDeferredSubmit(input) {
|
|
const calledRef = useRef(false);
|
|
const awaitFormSubmit = useCallback(
|
|
(callback) => {
|
|
const form = input?.form;
|
|
if (!form) {
|
|
return;
|
|
}
|
|
const interceptFormSubmit = (event) => {
|
|
event.preventDefault();
|
|
runCallback();
|
|
form.submit();
|
|
};
|
|
calledRef.current = false;
|
|
form.addEventListener('submit', interceptFormSubmit);
|
|
const runCallback = () => {
|
|
form.removeEventListener('submit', interceptFormSubmit);
|
|
clearTimeout(timer);
|
|
if (!calledRef.current) {
|
|
callback();
|
|
}
|
|
};
|
|
const timer = setTimeout(runCallback, 400);
|
|
},
|
|
[input]
|
|
);
|
|
awaitFormSubmit.done = () => {
|
|
calledRef.current = true;
|
|
};
|
|
return awaitFormSubmit;
|
|
}
|