import { useState } from "react"; import { Text } from "@/components/ui/text"; import { validateVendorDocument } from "@/domain/vendor-portal/lib/document-validation"; import { isApprovalRequired, validateUpliftAmount, type UpliftFormValues, } from "@/domain/vendor-portal/lib/uplift-validation"; type UpliftRequestFormProps = { mode: "create" | "revise"; currentNte?: number; initialRequested?: string; initialReason?: string; hasExistingEvidence?: boolean; submitting: boolean; uploadingPercent: number | undefined; errorMessage: string; onSubmit: (values: UpliftFormValues) => void; onCancel?: () => void; }; export function UpliftRequestForm({ mode, currentNte, initialRequested = "", initialReason = "", hasExistingEvidence = false, submitting, uploadingPercent, errorMessage, onSubmit, onCancel, }: UpliftRequestFormProps) { const [requested, setRequested] = useState(initialRequested); const [reason, setReason] = useState(initialReason); const [evidenceFile, setEvidenceFile] = useState(); const [formError, setFormError] = useState(""); const showApprovalFields = mode === "revise" || isApprovalRequired(requested, currentNte); const submit = (event: React.FormEvent) => { event.preventDefault(); const amount = Number.parseFloat(requested); const validationError = validateUpliftAmount(requested, currentNte, reason, { file: evidenceFile, hasExisting: hasExistingEvidence, mode, }); setFormError(validationError); if (validationError) { return; } onSubmit({ amount, reason: reason.trim(), evidenceFile }); }; const chooseFile = (file?: File) => { const validationMessage = file ? validateVendorDocument(file) : undefined; setFormError(validationMessage ?? ""); setEvidenceFile(file); }; const shownError = errorMessage || formError; const busy = submitting || uploadingPercent !== undefined; return (
void submit(event)} className="vp-uplift-form" aria-label={mode === "revise" ? "Revise uplift request" : "Request NTE uplift"} > {mode === "create" && (
Current NTE ${Number(currentNte ?? 0).toFixed(2)}
)}
{ setRequested(event.target.value); setFormError(""); }} placeholder="0.00" />
{showApprovalFields && ( <>