From d7ceb184f1c3a41d18ee1d016e60cb6d65fa5cb2 Mon Sep 17 00:00:00 2001 From: Bogdan Cochior <bogdan.cochior@thinslices.com> Date: Wed, 1 Aug 2018 14:16:22 +0300 Subject: [PATCH] fix(mts): fix files with the same name for package export --- .../src/components/ReviewerReportForm.js | 2 +- .../src/components/SubmitRevision.js | 2 +- .../src/components/Files/Files.js | 2 +- .../components-faraday/src/redux/files.js | 31 +++++++++++++++++-- packages/xpub-faraday/config/validations.js | 4 +++ 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/packages/component-manuscript/src/components/ReviewerReportForm.js b/packages/component-manuscript/src/components/ReviewerReportForm.js index 4ec7c3247..d006b6d88 100644 --- a/packages/component-manuscript/src/components/ReviewerReportForm.js +++ b/packages/component-manuscript/src/components/ReviewerReportForm.js @@ -215,7 +215,7 @@ export default compose( changeForm('reviewerReport', field, value) }, addFile: ({ formValues = {}, uploadFile, changeForm, version }) => file => { - uploadFile(file, 'review', version.id) + uploadFile(file, 'review', version) .then(file => { const files = formValues.files || [] const newFiles = [...files, file] diff --git a/packages/component-manuscript/src/components/SubmitRevision.js b/packages/component-manuscript/src/components/SubmitRevision.js index e1fd229e1..a962668fb 100644 --- a/packages/component-manuscript/src/components/SubmitRevision.js +++ b/packages/component-manuscript/src/components/SubmitRevision.js @@ -183,7 +183,7 @@ export default compose( ), withHandlers({ addFile: ({ formValues = {}, uploadFile, changeForm, version }) => file => { - uploadFile(file, 'responseToReviewers', version.id) + uploadFile(file, 'responseToReviewers', version) .then(file => { const { files } = formValues const newFiles = files.responseToReviewers diff --git a/packages/components-faraday/src/components/Files/Files.js b/packages/components-faraday/src/components/Files/Files.js index b225acbab..281fa44d1 100644 --- a/packages/components-faraday/src/components/Files/Files.js +++ b/packages/components-faraday/src/components/Files/Files.js @@ -145,7 +145,7 @@ export default compose( changeForm, parentForm = 'wizard', }) => type => file => { - uploadFile(file, type, version.id) + uploadFile(file, type, version) .then(file => { const newFiles = { ...files, diff --git a/packages/components-faraday/src/redux/files.js b/packages/components-faraday/src/redux/files.js index 63a616ed5..1ece0f822 100644 --- a/packages/components-faraday/src/redux/files.js +++ b/packages/components-faraday/src/redux/files.js @@ -32,10 +32,11 @@ const uploadSuccess = () => ({ type: UPLOAD_SUCCESS, }) -const createFileData = (file, type, fragmentId) => { +const createFileData = ({ file, type, fragmentId, newName }) => { const data = new FormData() data.append('fileType', type) data.append('fragmentId', fragmentId) + data.append('newName', newName) data.append('file', file) return { @@ -47,6 +48,26 @@ const createFileData = (file, type, fragmentId) => { } } +const setFileName = (file, { files }) => { + let newFilename = file.name + const fileCount = Object.values(files) + .reduce((acc, f) => [...acc, ...f], []) + .map(f => f.originalName) + .reduce((count, name) => { + if (file.name === name) { + count += 1 + } + return count + }, 0) + if (fileCount > 0) { + const ext = file.name.split('.').reverse()[0] + const filename = file.name.replace(`.${ext}`, '') + newFilename = `${filename} (${fileCount}).${ext}` + } + + return newFilename +} + const removeRequest = () => ({ type: REMOVE_REQUEST, }) @@ -66,9 +87,13 @@ export const getRequestStatus = state => state.files.isFetching export const getFileError = state => state.files.error // thunked actions -export const uploadFile = (file, type, fragmentId) => dispatch => { +export const uploadFile = (file, type, fragment) => dispatch => { dispatch(uploadRequest(type)) - return request('/files', createFileData(file, type, fragmentId)).then( + const newName = setFileName(file, fragment) + return request( + '/files', + createFileData({ file, type, fragmentId: fragment.id, newName }), + ).then( r => { dispatch(uploadSuccess()) return r diff --git a/packages/xpub-faraday/config/validations.js b/packages/xpub-faraday/config/validations.js index b376584a5..57f879433 100644 --- a/packages/xpub-faraday/config/validations.js +++ b/packages/xpub-faraday/config/validations.js @@ -41,6 +41,7 @@ module.exports = { Joi.object({ id: Joi.string(), name: Joi.string().required(), + originalName: Joi.string(), type: Joi.string(), size: Joi.number(), url: Joi.string(), @@ -51,6 +52,7 @@ module.exports = { Joi.object({ id: Joi.string(), name: Joi.string().required(), + originalName: Joi.string(), type: Joi.string(), size: Joi.number(), url: Joi.string(), @@ -61,6 +63,7 @@ module.exports = { Joi.object({ id: Joi.string(), name: Joi.string().required(), + originalName: Joi.string(), type: Joi.string(), size: Joi.number(), url: Joi.string(), @@ -71,6 +74,7 @@ module.exports = { Joi.object({ id: Joi.string(), name: Joi.string().required(), + originalName: Joi.string(), type: Joi.string(), size: Joi.number(), url: Joi.string(), -- GitLab