diff --git a/invenio_rdm_records/assets/semantic-ui/js/invenio_rdm_records/src/deposit/fields/FileUploader/FileUploader.js b/invenio_rdm_records/assets/semantic-ui/js/invenio_rdm_records/src/deposit/fields/FileUploader/FileUploader.js index 1fd582bab5..b73cc7b961 100644 --- a/invenio_rdm_records/assets/semantic-ui/js/invenio_rdm_records/src/deposit/fields/FileUploader/FileUploader.js +++ b/invenio_rdm_records/assets/semantic-ui/js/invenio_rdm_records/src/deposit/fields/FileUploader/FileUploader.js @@ -3,6 +3,7 @@ // Copyright (C) 2020-2022 Northwestern University. // Copyright (C) 2022 Graz University of Technology. // Copyright (C) 2022 TU Wien. +// Copyright (C) 2024 KTH Royal Institute of Technology. // // Invenio-RDM-Records is free software; you can redistribute it and/or modify it // under the terms of the MIT License; see LICENSE file for more details. @@ -40,6 +41,7 @@ export const FileUploaderComponent = ({ isFileImportInProgress, decimalSizeDisplay, filesLocked, + allowEmptyFiles, ...uiProps }) => { // We extract the working copy of the draft stored as `values` in formik @@ -47,6 +49,9 @@ export const FileUploaderComponent = ({ const filesEnabled = _get(formikDraft, "files.enabled", false); const [warningMsg, setWarningMsg] = useState(); const lockFileUploader = !isDraftRecord && filesLocked; + const uploadErrors = _map(files, (fileState) => fileState.errors).filter( + (errors) => errors + ); const filesList = Object.values(files).map((fileState) => { return { @@ -79,6 +84,9 @@ export const FileUploaderComponent = ({ ); const maxFileStorageReached = filesSize + acceptedFilesSize > quota.maxStorage; + const emptyFiles = acceptedFiles.filter((file) => file.size === 0); + const nonEmptyFiles = acceptedFiles.filter((file) => file.size > 0); + const filesNames = _map(filesList, "name"); const duplicateFiles = acceptedFiles.filter((acceptedFile) => filesNames.includes(acceptedFile.name) @@ -130,7 +138,26 @@ export const FileUploaderComponent = ({ ); } else { - uploadFiles(formikDraft, acceptedFiles); + if (!_isEmpty(emptyFiles) && !allowEmptyFiles) { + setWarningMsg( +
+ +
+ ); + } + + // Proceed with uploading the non-empty files or all files if empty files are allowed + if (allowEmptyFiles || !_isEmpty(nonEmptyFiles)) { + uploadFiles(formikDraft, allowEmptyFiles ? acceptedFiles : nonEmptyFiles); + } } }, multiple: true, @@ -175,6 +202,20 @@ export const FileUploaderComponent = ({ > <> + {!_isEmpty(uploadErrors) && ( + + + ( +
{error.message}
+ ))} + /> +
+
+ )} {!lockFileUploader && ( { const { links, entries } = state.files; + const allowEmptyFiles = document.getElementById("allowEmptyFiles")?.value === "true"; return { files: entries, links, @@ -21,6 +23,7 @@ const mapStateToProps = (state) => { hasParentRecord: Boolean( state.deposit.record?.versions?.index && state.deposit.record?.versions?.index > 1 ), + allowEmptyFiles, }; };