2020-02-18 16:39:03 +01:00
|
|
|
import { fromJS } from 'immutable';
|
2020-03-31 17:54:12 +02:00
|
|
|
|
|
|
|
import { createNewFilesToDownloadArray, createNewFilesToUploadArray } from '../../utils';
|
2020-02-18 16:39:03 +01:00
|
|
|
|
|
|
|
const initialState = fromJS({
|
2020-02-24 14:08:51 +01:00
|
|
|
currentStep: 'browse',
|
2020-02-18 18:05:52 +01:00
|
|
|
filesToUpload: [],
|
2020-03-31 16:28:12 +02:00
|
|
|
filesToDownload: [],
|
2020-02-20 16:50:00 +01:00
|
|
|
fileToEdit: null,
|
2020-02-18 16:39:03 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
const reducer = (state, action) => {
|
|
|
|
switch (action.type) {
|
2020-02-18 18:05:52 +01:00
|
|
|
case 'ADD_FILES_TO_UPLOAD':
|
|
|
|
return state
|
|
|
|
.update('filesToUpload', list =>
|
2020-02-19 11:21:25 +01:00
|
|
|
list
|
|
|
|
.concat(fromJS(createNewFilesToUploadArray(action.filesToUpload)))
|
|
|
|
.map((data, index) => data.set('originalIndex', index))
|
2020-02-18 18:05:52 +01:00
|
|
|
)
|
|
|
|
.update('currentStep', () => action.nextStep);
|
2020-04-01 10:42:08 +02:00
|
|
|
case 'ADD_URLS_TO_FILES_TO_UPLOAD':
|
2020-03-31 17:54:12 +02:00
|
|
|
return state
|
|
|
|
.update('filesToUpload', list =>
|
|
|
|
list
|
|
|
|
.concat(
|
|
|
|
fromJS(createNewFilesToDownloadArray(state.get('filesToDownload'), list.toJS()))
|
|
|
|
)
|
|
|
|
.map((data, index) => data.set('originalIndex', index))
|
|
|
|
)
|
|
|
|
.update('currentStep', () => action.nextStep)
|
|
|
|
.update('filesToDownload', () => fromJS([]));
|
2020-02-19 11:21:25 +01:00
|
|
|
case 'CLEAN_FILES_ERROR':
|
|
|
|
return state.update('filesToUpload', list =>
|
|
|
|
list.map(data => {
|
2020-03-31 17:54:12 +02:00
|
|
|
if (data.get('tempId')) {
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
|
2020-02-19 11:21:25 +01:00
|
|
|
return data.set('hasError', false).set('errorMessage', null);
|
|
|
|
})
|
|
|
|
);
|
2020-03-31 17:54:12 +02:00
|
|
|
case 'FILE_DOWNLOADED':
|
|
|
|
return state.updateIn(['filesToUpload'], list => {
|
|
|
|
return list.map(file => {
|
|
|
|
if (file.get('tempId') === action.fileTempId) {
|
|
|
|
return file.update('isDownloading', () => false).update('file', () => action.blob);
|
|
|
|
}
|
|
|
|
|
|
|
|
return file;
|
|
|
|
});
|
|
|
|
});
|
2020-02-18 18:05:52 +01:00
|
|
|
case 'GO_TO':
|
|
|
|
return state.update('currentStep', () => action.to);
|
2020-03-24 07:35:16 +01:00
|
|
|
case 'INIT_FILE_TO_EDIT':
|
|
|
|
return state.update('fileToEdit', () => fromJS(action.fileToEdit));
|
2020-03-25 13:05:23 +01:00
|
|
|
case 'ON_ABORT_UPLOAD':
|
|
|
|
return state.updateIn(['fileToEdit', 'isUploading'], () => false);
|
2020-03-31 16:28:12 +02:00
|
|
|
case 'ON_CHANGE_URLS_TO_DOWNLOAD':
|
|
|
|
return state.updateIn(['filesToDownload'], () => fromJS(action.value));
|
2020-03-05 10:56:05 +01:00
|
|
|
case 'ON_CHANGE':
|
|
|
|
return state.updateIn(['fileToEdit', ...action.keys.split('.')], () => action.value);
|
2020-02-24 15:45:00 +01:00
|
|
|
case 'ON_SUBMIT_EDIT_NEW_FILE': {
|
|
|
|
const originalIndex = state.getIn(['fileToEdit', 'originalIndex']);
|
|
|
|
|
|
|
|
return state
|
2020-03-05 10:56:05 +01:00
|
|
|
.updateIn(['filesToUpload', originalIndex], () => state.get('fileToEdit'))
|
2020-02-24 15:45:00 +01:00
|
|
|
.update('fileToEdit', () => null);
|
|
|
|
}
|
2020-03-24 10:48:21 +01:00
|
|
|
case 'ON_SUBMIT_EDIT_EXISTING_FILE':
|
|
|
|
return state.updateIn(['fileToEdit', 'isUploading'], () => true);
|
2020-02-19 09:14:11 +01:00
|
|
|
case 'REMOVE_FILE_TO_UPLOAD':
|
2020-02-19 10:12:35 +01:00
|
|
|
return state.update('filesToUpload', list => {
|
2020-03-05 10:56:05 +01:00
|
|
|
return list.filter(data => data.get('originalIndex') !== action.fileIndex);
|
2020-02-19 10:12:35 +01:00
|
|
|
});
|
2020-02-25 14:35:48 +01:00
|
|
|
case 'RESET_FILE_TO_EDIT':
|
|
|
|
return state.update('fileToEdit', () => null);
|
2020-02-18 16:39:03 +01:00
|
|
|
case 'RESET_PROPS':
|
|
|
|
return initialState;
|
2020-02-24 15:45:00 +01:00
|
|
|
case 'SET_CROP_RESULT': {
|
|
|
|
return state.updateIn(['fileToEdit', 'file'], () => fromJS(action.blob));
|
|
|
|
}
|
2020-02-19 11:21:25 +01:00
|
|
|
case 'SET_FILE_ERROR':
|
|
|
|
return state.update('filesToUpload', list => {
|
|
|
|
return list.map(data => {
|
|
|
|
if (data.get('originalIndex') === action.fileIndex) {
|
|
|
|
return data
|
|
|
|
.set('isUploading', false)
|
|
|
|
.set('hasError', true)
|
|
|
|
.set('errorMessage', action.errorMessage);
|
|
|
|
}
|
|
|
|
|
|
|
|
return data;
|
|
|
|
});
|
|
|
|
});
|
2020-03-31 17:54:12 +02:00
|
|
|
case 'SET_FILE_TO_DOWNLOAD_ERROR':
|
|
|
|
return state.update('filesToUpload', list => {
|
|
|
|
return list.map(file => {
|
|
|
|
if (file.get('tempId') === action.fileTempId) {
|
|
|
|
return file
|
|
|
|
.update('isDownloading', () => false)
|
|
|
|
.update('hasError', () => true)
|
2020-04-03 15:12:15 +02:00
|
|
|
.update('errorMessage', () => file.get('fileOriginalName'));
|
2020-03-31 17:54:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return file;
|
|
|
|
});
|
|
|
|
});
|
2020-02-20 16:50:00 +01:00
|
|
|
case 'SET_FILE_TO_EDIT':
|
2020-03-05 10:56:05 +01:00
|
|
|
return state.update('fileToEdit', () => state.getIn(['filesToUpload', action.fileIndex]));
|
2020-04-02 21:53:25 +02:00
|
|
|
case 'SET_FILE_TO_EDIT_ERROR':
|
|
|
|
return state
|
|
|
|
.updateIn(['fileToEdit', 'hasError'], () => true)
|
|
|
|
.updateIn(['fileToEdit', 'errorMessage'], () => action.errorMessage)
|
|
|
|
.updateIn(['fileToEdit', 'isUploading'], () => false);
|
2020-02-19 09:14:11 +01:00
|
|
|
case 'SET_FILES_UPLOADING_STATE':
|
|
|
|
return state.update('filesToUpload', list =>
|
2020-02-19 13:40:36 +01:00
|
|
|
list.map(data =>
|
|
|
|
data
|
|
|
|
.set('isUploading', true)
|
|
|
|
.set('hasError', false)
|
|
|
|
.set('errorMessage', null)
|
|
|
|
)
|
2020-02-19 09:14:11 +01:00
|
|
|
);
|
2020-02-19 10:12:35 +01:00
|
|
|
|
2020-02-18 16:39:03 +01:00
|
|
|
default:
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default reducer;
|
|
|
|
export { initialState };
|