diff --git a/src/components/AttachmentPicker/index.native.tsx b/src/components/AttachmentPicker/index.native.tsx index 7463e2b4add4..3420a30da098 100644 --- a/src/components/AttachmentPicker/index.native.tsx +++ b/src/components/AttachmentPicker/index.native.tsx @@ -18,7 +18,7 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useStyleUtils from '@hooks/useStyleUtils'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; -import {cleanFileName, resizeImageIfNeeded, showCameraPermissionsAlert, verifyFileFormat} from '@libs/fileDownload/FileUtils'; +import {cleanFileName, showCameraPermissionsAlert, verifyFileFormat} from '@libs/fileDownload/FileUtils'; import Log from '@libs/Log'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; @@ -429,10 +429,9 @@ function AttachmentPicker({ if (!shouldValidateImage && fileDataName && Str.isImage(fileDataName)) { return getDataForUpload(fileDataObject) - .then((file) => resizeImageIfNeeded(file)) - .then((resizedFile) => - ImageSize.getSize(resizedFile.uri ?? '').then(({width, height}) => ({ - ...resizedFile, + .then((file) => + ImageSize.getSize(file.uri ?? '').then(({width, height}) => ({ + ...file, width, height, })), @@ -442,16 +441,15 @@ function AttachmentPicker({ if (fileDataName && Str.isImage(fileDataName)) { return getDataForUpload(fileDataObject) - .then((file) => resizeImageIfNeeded(file)) - .then((resizedFile) => - ImageSize.getSize(resizedFile.uri ?? '').then(({width, height}) => { + .then((file) => + ImageSize.getSize(file.uri ?? '').then(({width, height}) => { if (width <= 0 || height <= 0) { showImageCorruptionAlert(); return null; } return { - ...resizedFile, + ...file, width, height, }; diff --git a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx index a067c804e235..0d2e5f18dad8 100644 --- a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx +++ b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx @@ -553,7 +553,7 @@ function MoneyRequestReceiptView({ openPicker({ onPicked: (files) => { onPickerClosed(); - validateFiles(files); + validateFiles(files, undefined, {isValidatingReceipts: false}); }, onCanceled: onPickerClosed, }); diff --git a/src/hooks/useFilesValidation.tsx b/src/hooks/useFilesValidation.tsx index 4ed4903692ec..d2cb12564b95 100644 --- a/src/hooks/useFilesValidation.tsx +++ b/src/hooks/useFilesValidation.tsx @@ -32,7 +32,7 @@ const sortFilesByOriginalOrder = (files: FileObject[], orderMap: Map (orderMap.get(a.uri ?? '') ?? 0) - (orderMap.get(b.uri ?? '') ?? 0)); }; -const isImageFile = (file: FileObject) => hasHeicOrHeifExtension(file) ?? Str.isImage(file.name ?? ''); +const isImageFile = (file: FileObject) => !!hasHeicOrHeifExtension(file) || Str.isImage(file.name ?? ''); function useFilesValidation(onFilesValidated: (files: FileObject[], dataTransferItems: DataTransferItem[]) => void) { const styles = useThemeStyles(); @@ -166,7 +166,7 @@ function useFilesValidation(onFilesValidated: (files: FileObject[], dataTransfer return; } - if (result.error === CONST.FILE_VALIDATION_ERRORS.FILE_TOO_LARGE && isImageFile(file) && validationState.isValidatingReceipts) { + if (result.error === CONST.FILE_VALIDATION_ERRORS.FILE_TOO_LARGE && isImageFile(file)) { filesToResize.push(file); return; } diff --git a/src/libs/validateAttachmentFile.ts b/src/libs/validateAttachmentFile.ts index f46fab1eb982..119e682c3281 100644 --- a/src/libs/validateAttachmentFile.ts +++ b/src/libs/validateAttachmentFile.ts @@ -1,4 +1,3 @@ -import {Str} from 'expensify-common'; import type {ValueOf} from 'type-fest'; import CONST from '@src/CONST'; import type {FileObject} from '@src/types/utils/Attachment'; @@ -29,9 +28,8 @@ async function validateAttachmentFile(file: FileObject, item?: DataTransferItem, return {isValid: false, error: CONST.FILE_VALIDATION_ERRORS.HEIC_OR_HEIF_IMAGE}; } - const isImage = Str.isImage(file.name); const maxFileSize = isValidatingReceipts ? CONST.API_ATTACHMENT_VALIDATIONS.RECEIPT_MAX_SIZE : CONST.API_ATTACHMENT_VALIDATIONS.MAX_SIZE; - if (!isImage && !hasHeicOrHeifExtension(file) && file.size > maxFileSize) { + if (file.size > maxFileSize) { return {isValid: false, error: CONST.FILE_VALIDATION_ERRORS.FILE_TOO_LARGE}; } diff --git a/tests/unit/ValidateAttachmentFileTest.ts b/tests/unit/ValidateAttachmentFileTest.ts index ce3f393cae4f..475bf663eb2f 100644 --- a/tests/unit/ValidateAttachmentFileTest.ts +++ b/tests/unit/ValidateAttachmentFileTest.ts @@ -141,11 +141,15 @@ describe('validateAttachmentFile', () => { expect(error.error).toEqual(CONST.FILE_VALIDATION_ERRORS.FILE_TOO_LARGE); }); - it('returns valid result for image over RECEIPT_MAX_SIZE (images skip non-image size check)', async () => { + it('returns invalid result for image over RECEIPT_MAX_SIZE', async () => { const file = createMockFile('receipt.jpg', CONST.API_ATTACHMENT_VALIDATIONS.MAX_SIZE + 1); const error = await validateAttachmentFile(file, undefined, true); - expect(error.isValid).toBe(true); + if (error.isValid) { + throw new Error('validateAttachmentFile should return an invalid result'); + } + + expect(error.error).toEqual(CONST.FILE_VALIDATION_ERRORS.FILE_TOO_LARGE); }); it('returns valid result when non-image is exactly at MAX_SIZE', async () => {