adding-posibility-to-choose-files-many-times-and-dont-replace-other-files
[arvados-workbench2.git] / src / store / file-uploader / file-uploader-reducer.ts
index 625306f0c3a50afcb87e8158ddbd7719f9668df2..9ea6313131b1d0e598ad5771cf75b5d370b5b86b 100644 (file)
@@ -3,6 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { UploadFile, fileUploaderActions, FileUploaderAction } from "./file-uploader-actions";
+import * as _ from 'lodash';
 
 export type UploaderState = UploadFile[];
 
@@ -20,9 +21,25 @@ export const fileUploaderReducer = (state: UploaderState = initialState, action:
             prevTime: 0,
             currentTime: 0
         })),
+        UPDATE_UPLOAD_FILES: files => {
+            const updateFiles = files.map((f, idx) => ({
+                id: state.length + idx,
+                file: f,
+                prevLoaded: 0,
+                loaded: 0,
+                total: 0,
+                startTime: 0,
+                prevTime: 0,
+                currentTime: 0
+            }));
+            const updatedState = state.concat(updateFiles);
+            const uniqUpdatedState = _.uniqBy(updatedState, 'file.name');
+
+            return uniqUpdatedState;
+        },
         START_UPLOAD: () => {
             const startTime = Date.now();
-            return state.map(f => ({...f, startTime, prevTime: startTime}));
+            return state.map(f => ({ ...f, startTime, prevTime: startTime }));
         },
         SET_UPLOAD_PROGRESS: ({ fileId, loaded, total, currentTime }) =>
             state.map(f => f.id === fileId ? {