Skip to content
Snippets Groups Projects
Commit b9f27f42 authored by Alexandru Munteanu's avatar Alexandru Munteanu
Browse files

feat(submission-wizard): add fetching for files

parent 45c6f708
No related branches found
No related tags found
3 merge requests!58Sprint #20 - Goal - Reviewers submit report,!57HIN-974,!55WIP: HIN-855 feat(reviewer-report): reviewer report form
import React from 'react' import React from 'react'
import styled from 'styled-components' import styled from 'styled-components'
import { th } from '@pubsweet/ui-toolkit' import { th } from '@pubsweet/ui-toolkit'
import { FilePicker } from '@pubsweet/ui' import { FilePicker, Spinner } from '@pubsweet/ui'
import { compose, withState, withHandlers, withProps } from 'recompose' import { compose, withState, withHandlers, withProps } from 'recompose'
import { radiusHelpers } from './styledHelpers' import { radiusHelpers } from './styledHelpers'
...@@ -36,6 +36,7 @@ const FileSection = ({ ...@@ -36,6 +36,7 @@ const FileSection = ({
required, required,
moveItem, moveItem,
maxFiles, maxFiles,
isFetching,
isFileItemOver, isFileItemOver,
canDropFileItem, canDropFileItem,
connectFileDrop, connectFileDrop,
...@@ -60,19 +61,23 @@ const FileSection = ({ ...@@ -60,19 +61,23 @@ const FileSection = ({
<Row alignItems="center"> <Row alignItems="center">
<Item> <Item>
<Label required={required}>{title}</Label> <Label required={required}>{title}</Label>
<FilePicker {isFetching ? (
allowedFileExtensions={allowedFileExtensions} <Spinner />
disabled={files.length >= maxFiles} ) : (
onUpload={onFilePick} <FilePicker
> allowedFileExtensions={allowedFileExtensions}
<ActionLink
disabled={files.length >= maxFiles} disabled={files.length >= maxFiles}
icon="plus" onUpload={onFilePick}
size="small"
> >
UPLOAD FILE <ActionLink
</ActionLink> disabled={files.length >= maxFiles}
</FilePicker> icon="plus"
size="small"
>
UPLOAD FILE
</ActionLink>
</FilePicker>
)}
</Item> </Item>
{supportedFormats && ( {supportedFormats && (
<Item justify="flex-end"> <Item justify="flex-end">
......
...@@ -12,6 +12,7 @@ import { ...@@ -12,6 +12,7 @@ import {
const WizardFiles = ({ const WizardFiles = ({
files, files,
addFile, addFile,
fetching,
moveFile, moveFile,
deleteFile, deleteFile,
changeList, changeList,
...@@ -23,6 +24,7 @@ const WizardFiles = ({ ...@@ -23,6 +24,7 @@ const WizardFiles = ({
allowedFileExtensions={['pdf', 'doc', 'docx', 'txt', 'rdf', 'odt']} allowedFileExtensions={['pdf', 'doc', 'docx', 'txt', 'rdf', 'odt']}
changeList={changeList} changeList={changeList}
files={get(files, 'manuscripts', [])} files={get(files, 'manuscripts', [])}
isFetching={get(fetching, 'manuscripts', false)}
isFirst isFirst
listId="manuscripts" listId="manuscripts"
maxFiles={1} maxFiles={1}
...@@ -39,6 +41,7 @@ const WizardFiles = ({ ...@@ -39,6 +41,7 @@ const WizardFiles = ({
allowedFileExtensions={['pdf', 'doc', 'docx', 'txt', 'rdf', 'odt']} allowedFileExtensions={['pdf', 'doc', 'docx', 'txt', 'rdf', 'odt']}
changeList={changeList} changeList={changeList}
files={get(files, 'coverLetter', [])} files={get(files, 'coverLetter', [])}
isFetching={get(fetching, 'coverLetter', false)}
listId="coverLetter" listId="coverLetter"
maxFiles={1} maxFiles={1}
moveItem={moveFile('coverLetter')} moveItem={moveFile('coverLetter')}
...@@ -52,6 +55,7 @@ const WizardFiles = ({ ...@@ -52,6 +55,7 @@ const WizardFiles = ({
<FileSection <FileSection
changeList={changeList} changeList={changeList}
files={get(files, 'supplementary', [])} files={get(files, 'supplementary', [])}
isFetching={get(fetching, 'supplementary', false)}
isLast isLast
listId="supplementary" listId="supplementary"
moveItem={moveFile('supplementary')} moveItem={moveFile('supplementary')}
...@@ -69,33 +73,67 @@ export default compose( ...@@ -69,33 +73,67 @@ export default compose(
withFilePreview, withFilePreview,
withFileDownload, withFileDownload,
withState('files', 'setFiles', ({ files }) => files), withState('files', 'setFiles', ({ files }) => files),
withState('fetching', 'setFilesFetching', {
manuscripts: false,
coverLetter: false,
supplementary: false,
}),
withHandlers({ withHandlers({
setFormFiles: ({ changeForm, setFiles }) => files => { setFormFiles: ({ changeForm, setFiles }) => files => {
setFiles(files) setFiles(files)
changeForm('submission', 'files', files) changeForm('submission', 'files', files)
}, },
setFilesFetching: ({ setFilesFetching }) => (type, value) => {
setFilesFetching(p => ({
...p,
[type]: value,
}))
},
}), }),
withHandlers({ withHandlers({
addFile: ({ files, version, uploadFile, setFormFiles }) => type => file => { addFile: ({
uploadFile({ file, type, fragment: version }).then(f => { files,
const newFiles = { version,
...files, uploadFile,
[type]: [...files[type], f], setFormFiles,
} setFilesFetching,
setFormFiles(newFiles) }) => type => file => {
}) setFilesFetching(type, true)
uploadFile({ file, type, fragment: version })
.then(f => {
const newFiles = {
...files,
[type]: [...files[type], f],
}
setFormFiles(newFiles)
setFilesFetching(type, false)
})
.catch(() => {
setFilesFetching(type, false)
})
}, },
downloadFile: ({ downloadFile, token }) => file => { downloadFile: ({ downloadFile, token }) => file => {
downloadFile(file) downloadFile(file)
}, },
deleteFile: ({ deleteFile, files, setFormFiles }) => type => file => { deleteFile: ({
deleteFile(file.id, type).then(() => { deleteFile,
const newFiles = { files,
...files, setFormFiles,
[type]: files[type].filter(f => f.id !== file.id), setFilesFetching,
} }) => type => file => {
setFormFiles(newFiles) setFilesFetching(type, true)
}) deleteFile(file.id, type)
.then(() => {
const newFiles = {
...files,
[type]: files[type].filter(f => f.id !== file.id),
}
setFormFiles(newFiles)
setFilesFetching(type, false)
})
.catch(() => {
setFilesFetching(type, false)
})
}, },
moveFile: ({ files, setFormFiles }) => type => (dragIndex, hoverIndex) => { moveFile: ({ files, setFormFiles }) => type => (dragIndex, hoverIndex) => {
const newFiles = { const newFiles = {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment