//
// SPDX-License-Identifier: AGPL-3.0
-import { CollectionUploaderAction, collectionUploaderActions } from "./collection-uploader-actions";
-import { CollectionUploadFile } from "../../../models/collection-file";
+import { CollectionUploaderAction, collectionUploaderActions, UploadFile } from "./collection-uploader-actions";
+import * as _ from 'lodash';
-export interface CollectionUploaderState {
- files: File[];
-}
+export type CollectionUploaderState = UploadFile[];
-const initialState: CollectionUploaderState = {
- files: []
-};
+const initialState: CollectionUploaderState = [];
export const collectionUploaderReducer = (state: CollectionUploaderState = initialState, action: CollectionUploaderAction) => {
return collectionUploaderActions.match(action, {
- SET_UPLOAD_FILES: (files) => ({
- ...state,
- files
- }),
+ SET_UPLOAD_FILES: files => files.map((f, idx) => ({
+ id: idx,
+ file: f,
+ prevLoaded: 0,
+ loaded: 0,
+ total: 0,
+ startTime: 0,
+ prevTime: 0,
+ currentTime: 0
+ })),
+ START_UPLOAD: () => {
+ const startTime = Date.now();
+ return state.map(f => ({...f, startTime, prevTime: startTime}));
+ },
+ SET_UPLOAD_PROGRESS: ({ fileId, loaded, total, currentTime }) => {
+ const files = _.cloneDeep(state);
+ const f = files.find(f => f.id === fileId);
+ if (f) {
+ f.prevLoaded = f.loaded;
+ f.loaded = loaded;
+ f.total = total;
+ f.prevTime = f.currentTime;
+ f.currentTime = currentTime;
+ }
+ return files;
+ },
default: () => state
});
};