-
Alexandru Munteanu authoredacf46417
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
import request, { remove } from 'pubsweet-client/src/helpers/api'
const initialState = {
isFetching: false,
error: null,
files: {
manuscripts: [],
supplementary: [],
coverLetter: [],
},
}
const UPLOAD_REQUEST = 'files/UPLOAD_REQUEST'
const UPLOAD_FAILURE = 'files/UPLOAD_FAILURE'
const UPLOAD_SUCCESS = 'files/UPLOAD_SUCCESS'
const REMOVE_REQUEST = 'files/REMOVE_REQUEST'
const REMOVE_FAILURE = 'files/REMOVE_FAILURE'
const REMOVE_SUCCESS = 'files/REMOVE_SUCCESS'
const SET_FILES = 'files/SET_FILES'
export const setFiles = (files, fileType) => ({
type: SET_FILES,
files,
fileType,
})
const uploadRequest = () => ({
type: UPLOAD_REQUEST,
})
const uploadFailure = error => ({
type: UPLOAD_FAILURE,
error,
})
const uploadSuccess = () => ({
type: UPLOAD_SUCCESS,
})
const createFileData = (file, type) => {
const data = new FormData()
data.append('file', file)
data.append('fileType', type)
return {
method: 'POST',
headers: {
Accept: 'text/plain',
},
body: data,
}
}
const removeRequest = () => ({
type: REMOVE_REQUEST,
})
export const getFiles = state => state.files.files
export const uploadFile = (file, type) => dispatch => {
dispatch(uploadRequest())
return request('/aws-upload', createFileData(file, type))
.then(r => {
dispatch(uploadSuccess())
return r
})
.catch(err => dispatch(uploadFailure(err.message)))
}
export const deleteFile = fileId => dispatch => {
dispatch(removeRequest())
return remove(`/aws-delete/${fileId}`)
}
export default (state = initialState, action) => {
switch (action.type) {
case UPLOAD_REQUEST:
return {
...state,
isFetching: true,
error: null,
}
case SET_FILES:
return {
...state,
files: {
...state.files,
[action.fileType]: action.files,
},
}
case UPLOAD_FAILURE:
return {
...state,
isFetching: false,
error: action.error,
}
case UPLOAD_SUCCESS:
return {
...state,
isFetching: false,
error: null,
}
default:
return state
}
}