Skip to content

Commit 99a74c8

Browse files
committed
Fix stale isValidatingMultipleFiles state in file validation error modal
Use validationState.isValidatingMultipleFiles (locally computed) instead of React state when building error objects, so the correct multi-file modal is shown on the first drop of >30 files.
1 parent 4c62e96 commit 99a74c8

1 file changed

Lines changed: 4 additions & 9 deletions

File tree

src/hooks/useFilesValidation.tsx

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {Str} from 'expensify-common';
22
import React, {useEffect, useRef, useState} from 'react';
33
import {InteractionManager} from 'react-native';
4-
import type {ValueOf} from 'type-fest';
54
import ConfirmModal from '@components/ConfirmModal';
65
import {useFullScreenLoaderActions} from '@components/FullScreenLoaderContext';
76
import PDFThumbnail from '@components/PDFThumbnail';
@@ -114,11 +113,6 @@ function useFilesValidation(onFilesValidated: (files: FileObject[], dataTransfer
114113
});
115114
};
116115

117-
const setErrorAndOpenModal = (error: ValueOf<typeof CONST.FILE_VALIDATION_ERRORS>) => {
118-
setFileError({error, isValidatingMultipleFiles});
119-
setIsErrorModalVisible(true);
120-
};
121-
122116
const checkIfAllValidatedAndProceed = () => {
123117
if (!validatedPDFs.current || !validFiles.current) {
124118
return;
@@ -265,9 +259,9 @@ function useFilesValidation(onFilesValidated: (files: FileObject[], dataTransfer
265259
} else {
266260
const errorMessage = result.reason instanceof Error ? result.reason.message : undefined;
267261
if (errorMessage === CONST.FILE_VALIDATION_ERRORS.IMAGE_DIMENSIONS_TOO_LARGE) {
268-
collectedErrors.current.push({error: CONST.FILE_VALIDATION_ERRORS.IMAGE_DIMENSIONS_TOO_LARGE, isValidatingMultipleFiles});
262+
collectedErrors.current.push({error: CONST.FILE_VALIDATION_ERRORS.IMAGE_DIMENSIONS_TOO_LARGE, isValidatingMultipleFiles: validationState.isValidatingMultipleFiles});
269263
} else {
270-
collectedErrors.current.push({error: CONST.FILE_VALIDATION_ERRORS.FILE_CORRUPTED, isValidatingMultipleFiles});
264+
collectedErrors.current.push({error: CONST.FILE_VALIDATION_ERRORS.FILE_CORRUPTED, isValidatingMultipleFiles: validationState.isValidatingMultipleFiles});
271265
}
272266
}
273267
}
@@ -347,7 +341,8 @@ function useFilesValidation(onFilesValidated: (files: FileObject[], dataTransfer
347341
if (items) {
348342
dataTransferItemList.current = items.slice(0, CONST.API_ATTACHMENT_VALIDATIONS.MAX_FILE_LIMIT);
349343
}
350-
setErrorAndOpenModal(CONST.FILE_VALIDATION_ERRORS.MAX_FILE_LIMIT_EXCEEDED);
344+
setFileError({error: CONST.FILE_VALIDATION_ERRORS.MAX_FILE_LIMIT_EXCEEDED, isValidatingMultipleFiles: validationState.isValidatingMultipleFiles});
345+
setIsErrorModalVisible(true);
351346
} else {
352347
validateAndResizeFiles(files, items ?? [], validationState);
353348
}

0 commit comments

Comments
 (0)