mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 02:58:11 +00:00
fix(onboarding): stop duplicate company-document upload on finalize
The documents step of CompanyProfileForm uploads company documents via
onUploadDocuments() and then triggers submit synchronously in the same
nextStep() call. The setDocumentFiles({}) that clears the staged files has
not re-rendered by the time finishMutation's closure runs, so reading
documentFiles there re-sent the exact same files and created a duplicate
row per document.
Drop the company-document upload from finishMutation — the documents step
already persisted them. Licenses stay, since they have no auto-upload path.
This commit is contained in:
@@ -212,23 +212,23 @@ export default function OnboardingWizardDialog({
|
|||||||
onError: (err) => setStartError(extractApiError(err).message),
|
onError: (err) => setStartError(extractApiError(err).message),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Finalize: upload per-role license files + company documents, then complete.
|
// Finalize: upload per-role license files, then complete.
|
||||||
|
//
|
||||||
|
// Company documents are deliberately NOT uploaded here. The documents step
|
||||||
|
// uploads them via `onUploadDocuments` and then triggers submit in the same
|
||||||
|
// synchronous `nextStep` call (CompanyProfileForm), so the `setDocumentFiles({})`
|
||||||
|
// that clears them has not re-rendered by the time this mutation's closure
|
||||||
|
// runs — reading `documentFiles` here would re-send the exact same files and
|
||||||
|
// create a duplicate row per document. Licenses have no such auto-upload, so
|
||||||
|
// they are uploaded here.
|
||||||
const finishMutation = useMutation({
|
const finishMutation = useMutation({
|
||||||
mutationFn: async () => {
|
mutationFn: async () => {
|
||||||
const companyId = company?.company?.id;
|
|
||||||
// Per-role business licenses (file model, resource=company_profiles).
|
// Per-role business licenses (file model, resource=company_profiles).
|
||||||
for (const [profileId, files] of Object.entries(licenseFiles)) {
|
for (const [profileId, files] of Object.entries(licenseFiles)) {
|
||||||
if (files.length > 0) {
|
if (files.length > 0) {
|
||||||
await companiesService.uploadProfileLicense(profileId, files);
|
await companiesService.uploadProfileLicense(profileId, files);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Nationality-based company documents (resource=companies).
|
|
||||||
const hasDocs = Object.values(documentFiles).some(
|
|
||||||
(f) => f !== null && (Array.isArray(f) ? f.length > 0 : true),
|
|
||||||
);
|
|
||||||
if (companyId && hasDocs) {
|
|
||||||
await companiesService.uploadDocuments(companyId, documentFiles);
|
|
||||||
}
|
|
||||||
return api.companies.completeOnboarding.call();
|
return api.companies.completeOnboarding.call();
|
||||||
},
|
},
|
||||||
onSuccess: async () => {
|
onSuccess: async () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user