diff --git a/src/app/v/[token]/dispatch/_components/uplift-request-form.tsx b/src/app/v/[token]/dispatch/_components/uplift-request-form.tsx index fa50f2b9..0ee1744a 100644 --- a/src/app/v/[token]/dispatch/_components/uplift-request-form.tsx +++ b/src/app/v/[token]/dispatch/_components/uplift-request-form.tsx @@ -43,12 +43,15 @@ export function UpliftRequestForm({ const [reason, setReason] = useState(initialReason); const [evidenceFile, setEvidenceFile] = useState(); const [formError, setFormError] = useState(""); + const [checkingEvidence, setCheckingEvidence] = useState(false); const latestSelection = useRef(0); const showApprovalFields = mode === "revise" || isApprovalRequired(requested, currentNte); const submit = (event: React.FormEvent) => { event.preventDefault(); + // The picked file is not in state until its check settles; submitting now would validate the old one. + if (checkingEvidence) return; const amount = Number.parseFloat(requested); const validationError = validateUpliftAmount(requested, currentNte, reason, { file: evidenceFile, @@ -64,11 +67,13 @@ export function UpliftRequestForm({ const chooseFile = async (file?: File) => { const selection = ++latestSelection.current; + setCheckingEvidence(Boolean(file)); const validationMessage = file ? await validateVendorDocument(file, mediaUsage) : undefined; // A newer pick may have settled while this one's video metadata was still loading. if (selection !== latestSelection.current) return; setFormError(validationMessage ?? ""); setEvidenceFile(file); + setCheckingEvidence(false); }; const shownError = errorMessage || formError; @@ -147,8 +152,14 @@ export function UpliftRequestForm({ {shownError}
- {mode === "revise" && (