Newer
Older
import React, { Fragment } from 'react'
import { get } from 'lodash'
import { compose, withState, withHandlers } from 'recompose'
import { FileSection, SortableList } from './'
import { withFileDownload, withFilePreview } from './helpers'
const WizardFiles = ({
files,
addFile,
moveFile,
deleteFile,
changeList,
previewFile,
downloadFile,
}) => (
<Fragment>
<FileSection
allowedFileExtensions={['pdf', 'doc', 'docx', 'txt', 'rdf', 'odt']}
changeList={changeList}
files={get(files, 'manuscripts', [])}
isFirst
listId="manuscripts"
moveItem={moveFile('manuscripts')}
onDelete={deleteFile('manuscripts')}
onDownload={downloadFile}
onFileDrop={addFile('manuscripts')}
onFilePick={addFile('manuscripts')}
onPreview={previewFile}
required
title="Main Manuscript"
/>
<FileSection
allowedFileExtensions={['pdf', 'doc', 'docx', 'txt', 'rdf', 'odt']}
changeList={changeList}
files={get(files, 'coverLetter', [])}
listId="coverLetter"
maxFiles={1}
moveItem={moveFile('coverLetter')}
onDelete={deleteFile('coverLetter')}
onDownload={downloadFile}
onFileDrop={addFile('coverLetter')}
onFilePick={addFile('coverLetter')}
onPreview={previewFile}
title="Cover Letter"
/>
<FileSection
changeList={changeList}
files={get(files, 'supplementary', [])}
isLast
listId="supplementary"
moveItem={moveFile('supplementary')}
onDelete={deleteFile('supplementary')}
onDownload={downloadFile}
onFileDrop={addFile('supplementary')}
onFilePick={addFile('supplementary')}
onPreview={previewFile}
/>
</Fragment>
)
export default compose(
withFilePreview,
withFileDownload,
withState('files', 'setFiles', ({ files }) => files),
withHandlers({
setFormFiles: ({ changeForm, setFiles }) => files => {
setFiles(files)
changeForm('submission', 'files', files)
},
}),
withHandlers({
addFile: ({ uploadFile, files, version, setFormFiles }) => type => file => {
uploadFile(file, type, version).then(f => {
const newFiles = {
...files,
[type]: [...files[type], f],
}
setFormFiles(newFiles)
})
},
downloadFile: ({ downloadFile, token }) => file => {
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
},
deleteFile: ({ deleteFile, files, setFormFiles }) => type => file => {
deleteFile(file.id, type).then(() => {
const newFiles = {
...files,
[type]: files[type].filter(f => f.id !== file.id),
}
setFormFiles(newFiles)
})
},
moveFile: ({ files, setFormFiles }) => type => (dragIndex, hoverIndex) => {
const newFiles = {
...files,
[type]: SortableList.moveItem(files[type], dragIndex, hoverIndex),
}
setFormFiles(newFiles)
},
previewFile: ({ previewFile }) => file => {
previewFile(file)
},
changeList: ({ files, setFormFiles }) => (from, to, fileId) => {
const swappedFile = files[from].find(f => f.id === fileId)
const newFiles = {
...files,
[to]: [...files[to], swappedFile],
[from]: files[from].filter(f => f.id !== fileId),
}
setFormFiles(newFiles)
},
}),
)(WizardFiles)