Skip to content

Commit fe2f998

Browse files
MelvinBotmadmax330
andcommitted
Use formRef.resetFormFieldError to clear validation errors before showing upload errors
Replace the clearErrors-only approach with formRef.resetFormFieldError to properly clear per-field validation errors (e.g. 'Field is required') before setting upload-specific errorFields. This ensures the upload size error is displayed when a form validation error was already present. Diff provided by MrMuzyk. Co-authored-by: Maxence Coulibaly <madmax330@users.noreply.github.com>
1 parent cf666f7 commit fe2f998

3 files changed

Lines changed: 18 additions & 6 deletions

File tree

src/components/SubStepForms/DocusignFullStep.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import React, {useCallback, useState} from 'react';
1+
import React, {useCallback, useRef, useState} from 'react';
22
import Button from '@components/Button';
33
import FormProvider from '@components/Form/FormProvider';
44
import InputWrapper from '@components/Form/InputWrapper';
5-
import type {FormInputErrors, FormOnyxKeys, FormOnyxValues} from '@components/Form/types';
5+
import type {FormInputErrors, FormOnyxKeys, FormOnyxValues, FormRef} from '@components/Form/types';
66
import InteractiveStepWrapper from '@components/InteractiveStepWrapper';
77
import Text from '@components/Text';
88
import UploadFile from '@components/UploadFile';
@@ -61,6 +61,8 @@ function DocusignFullStep<TFormID extends keyof OnyxFormValuesMapping>({
6161
const styles = useThemeStyles();
6262
const {environmentURL} = useEnvironment();
6363

64+
const formRef = useRef<FormRef | null>(null);
65+
6466
const [uploadedFiles, setUploadedFiles] = useState<FileObject[]>(defaultValue);
6567

6668
const validate = useCallback(
@@ -87,6 +89,7 @@ function DocusignFullStep<TFormID extends keyof OnyxFormValuesMapping>({
8789
return;
8890
}
8991

92+
formRef.current?.resetFormFieldError(inputID as string);
9093
clearErrors(formID);
9194
setErrorFields(formID, {[inputID]: {onUpload: error}});
9295
};
@@ -107,6 +110,7 @@ function DocusignFullStep<TFormID extends keyof OnyxFormValuesMapping>({
107110
startStepIndex={startStepIndex}
108111
>
109112
<FormProvider
113+
ref={formRef}
110114
formID={formID}
111115
submitButtonText={translate('common.submit')}
112116
onSubmit={onSubmit}

src/pages/ReimbursementAccount/NonUSD/BeneficialOwnerInfo/BeneficialOwnerDetailsFormSubSteps/Documents.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import React, {useCallback, useMemo, useState} from 'react';
1+
import React, {useCallback, useMemo, useRef, useState} from 'react';
22
import {View} from 'react-native';
33
import FormProvider from '@components/Form/FormProvider';
44
import InputWrapper from '@components/Form/InputWrapper';
5-
import type {FormInputErrors, FormOnyxValues} from '@components/Form/types';
5+
import type {FormInputErrors, FormOnyxValues, FormRef} from '@components/Form/types';
66
import Text from '@components/Text';
77
import UploadFile from '@components/UploadFile';
88
import useLocalize from '@hooks/useLocalize';
@@ -45,6 +45,8 @@ function Documents({onNext, isEditing, ownerBeingModifiedID}: DocumentsProps) {
4545
[codiceFiscaleInputID]: Array.isArray(reimbursementAccountDraft?.[codiceFiscaleInputID]) ? (reimbursementAccountDraft?.[codiceFiscaleInputID] ?? []) : [],
4646
};
4747

48+
const formRef = useRef<FormRef | null>(null);
49+
4850
const [uploadedProofOfOwnership, setUploadedProofOfOwnership] = useState<FileObject[]>(defaultValues[proofOfOwnershipInputID]);
4951
const [uploadedCopyOfID, setUploadedCopyOfID] = useState<FileObject[]>(defaultValues[copyOfIDInputID]);
5052
const [uploadedAddressProof, setUploadedAddressProof] = useState<FileObject[]>(defaultValues[addressProofInputID]);
@@ -78,6 +80,7 @@ function Documents({onNext, isEditing, ownerBeingModifiedID}: DocumentsProps) {
7880
return;
7981
}
8082

83+
formRef.current?.resetFormFieldError(inputID);
8184
clearErrors(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM);
8285
setErrorFields(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM, {[inputID]: {onUpload: error}});
8386
};
@@ -98,6 +101,7 @@ function Documents({onNext, isEditing, ownerBeingModifiedID}: DocumentsProps) {
98101

99102
return (
100103
<FormProvider
104+
ref={formRef}
101105
formID={ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM}
102106
submitButtonText={translate(isEditing ? 'common.confirm' : 'common.next')}
103107
validate={validate}

src/pages/ReimbursementAccount/NonUSD/SignerInfo/subSteps/UploadDocuments.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import React, {useEffect, useState} from 'react';
1+
import React, {useEffect, useRef, useState} from 'react';
22
import {View} from 'react-native';
33
import Button from '@components/Button';
44
import DotIndicatorMessage from '@components/DotIndicatorMessage';
55
import FormProvider from '@components/Form/FormProvider';
66
import InputWrapper from '@components/Form/InputWrapper';
7-
import type {FormInputErrors, FormOnyxKeys, FormOnyxValues} from '@components/Form/types';
7+
import type {FormInputErrors, FormOnyxKeys, FormOnyxValues, FormRef} from '@components/Form/types';
88
import Text from '@components/Text';
99
import UploadFile from '@components/UploadFile';
1010
import useLocalize from '@hooks/useLocalize';
@@ -50,6 +50,8 @@ function UploadDocuments({onNext, isEditing}: UploadDocumentsProps) {
5050
[CODICE_FISCALE]: Array.isArray(reimbursementAccountDraft?.[CODICE_FISCALE]) ? (reimbursementAccountDraft?.[CODICE_FISCALE] ?? []) : [],
5151
};
5252

53+
const formRef = useRef<FormRef | null>(null);
54+
5355
const [uploadedIDs, setUploadedID] = useState<FileObject[]>(defaultValues[COPY_OF_ID]);
5456
const [uploadedProofsOfAddress, setUploadedProofOfAddress] = useState<FileObject[]>(defaultValues[ADDRESS_PROOF]);
5557
const [uploadedProofsOfDirectors, setUploadedProofsOfDirectors] = useState<FileObject[]>(defaultValues[PROOF_OF_DIRECTORS]);
@@ -97,6 +99,7 @@ function UploadDocuments({onNext, isEditing}: UploadDocumentsProps) {
9799
return;
98100
}
99101

102+
formRef.current?.resetFormFieldError(inputID);
100103
clearErrors(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM);
101104
setErrorFields(ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM, {[inputID]: {onUpload: error}});
102105
};
@@ -109,6 +112,7 @@ function UploadDocuments({onNext, isEditing}: UploadDocumentsProps) {
109112

110113
return (
111114
<FormProvider
115+
ref={formRef}
112116
formID={ONYXKEYS.FORMS.REIMBURSEMENT_ACCOUNT_FORM}
113117
submitButtonText={translate(isEditing ? 'common.confirm' : 'common.next')}
114118
onSubmit={handleSubmitWithDownload}

0 commit comments

Comments
 (0)