From 1f7c460dd3dd9575ab52d37fd8b3a298e92b16b9 Mon Sep 17 00:00:00 2001 From: Stefano Ricci Date: Tue, 3 Sep 2024 15:27:45 +0200 Subject: [PATCH] fixed dropzone invalid file error message --- core/i18n/resources/en/common.js | 1 + webapp/components/Dropzone/Dropzone.js | 42 +++++++++++++++++++------- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/core/i18n/resources/en/common.js b/core/i18n/resources/en/common.js index 7721d4a1df..ac78247bc2 100644 --- a/core/i18n/resources/en/common.js +++ b/core/i18n/resources/en/common.js @@ -208,6 +208,7 @@ Do you want to proceed?`, dropzone: { acceptedFilesMessage: '(Only {{acceptedExtensions}} files with a max size of {{maxSize}} will be accepted)', error: { + fileNotValid: 'Selected file is not valid', fileTooBig: 'Selected file is too big', invalidFileExtension: 'Invalid file extension: {{extension}}', }, diff --git a/webapp/components/Dropzone/Dropzone.js b/webapp/components/Dropzone/Dropzone.js index 743e7e94ce..e1235e79cd 100644 --- a/webapp/components/Dropzone/Dropzone.js +++ b/webapp/components/Dropzone/Dropzone.js @@ -46,14 +46,6 @@ const Dropzone = (props) => { const validateFiles = useCallback( (files) => { - if (!files.length) { - // Dropzone component filters out the files exceeding the specified max size - return i18n.t('dropzone.error.fileTooBig') - } - if (acceptProp && typeof acceptProp === 'object') { - // 'accept' is specified and files have been accepted successfully - return null - } const invalidExtension = files .map(FileUtils.getExtension) .find((extension) => !acceptedExtensions.includes(extension)) @@ -63,24 +55,52 @@ const Dropzone = (props) => { } return null }, - [acceptProp, acceptedExtensions] + [acceptedExtensions, i18n] ) - const onDrop = useCallback( + const onDropAccepted = useCallback( (files) => { const error = validateFiles(files) if (error) { setErrorMessage(error) } else { + setErrorMessage(null) onDropProp(files) } }, [onDropProp, validateFiles] ) + const onDropRejected = useCallback( + (fileRejections) => { + const errorMessages = fileRejections.map((fileRejection) => { + const { errors, file } = fileRejection + const errorCodes = errors.map((error) => error.code) + + if (errorCodes.includes('file-invalid-type')) { + const extension = FileUtils.getExtension(file.path) + return i18n.t('dropzone.error.invalidFileExtension', { extension }) + } else if (errorCodes.includes('file-too-large')) { + return i18n.t('dropzone.error.fileTooBig') + } else { + return i18n.t('dropzone.error.fileNotValid') + } + }) + setErrorMessage(errorMessages.join(', ')) + }, + [i18n] + ) + return ( <> - + {({ getRootProps, getInputProps }) => (