demarches-normaliennes/app/javascript/components/shared/hooks.js

34 lines
858 B
JavaScript
Raw Normal View History

2021-06-09 17:13:26 +02:00
import { useRef, useCallback } from 'react';
export function useDeferredSubmit(input) {
const calledRef = useRef(false);
const awaitFormSubmit = useCallback(
(callback) => {
2021-07-06 15:06:38 +02:00
const form = input?.form;
2021-06-09 17:13:26 +02:00
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;
}