diff --git a/packages/component-manuscript/src/components/ReviewerReportForm.js b/packages/component-manuscript/src/components/ReviewerReportForm.js index 4ec7c32476a16eaab4b13f2da8ac8711149492a9..d006b6d88ce239a76b440948425e0c75457a075f 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 e1fd229e148f5d5313d23dced8a2bb1e27c6fb68..a962668fb2bbb1537795e8057505a23526e109ad 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 b225acbabea7d6188800d23957eb4c630c228c30..281fa44d1069cfd429712806328208fd602de6d5 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 63a616ed58a0ccf5b58cc023cd4917b07661c484..1ece0f82225f80925ba13bf47f60439de76c7d02 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 b376584a5ddaaee1104667a0e08eedf0b19c1b86..57f879433bb28902b67fe957e106049ae03c39bc 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(),