18169: Removed cancel disable when uploading
[arvados-workbench2.git] / src / store / file-uploader / file-uploader-reducer.ts
index 625306f0c3a50afcb87e8158ddbd7719f9668df2..bade4c8f88082aa6057d6e8f7c1d07f2cc134979 100644 (file)
@@ -3,6 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { UploadFile, fileUploaderActions, FileUploaderAction } from "./file-uploader-actions";
+import { uniqBy } from 'lodash';
 
 export type UploaderState = UploadFile[];
 
@@ -20,9 +21,48 @@ 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;
+        },
+        DELETE_UPLOAD_FILE: file => {
+            const idToDelete: number = file.id;
+            const updatedState = state.filter(file => file.id !== idToDelete);
+
+            const key: string | undefined = Object.keys((window as any).cancelTokens)
+                .find(key => key.indexOf(file.file.name) > -1);
+
+            if (key) {
+                (window as any).cancelTokens[key]();
+                delete (window as any).cancelTokens[key];
+            }
+
+            return updatedState;
+        },
+        CANCEL_FILES_UPLOAD: () => {
+            Object.keys((window as any).cancelTokens)
+                .forEach((key) => {
+                    (window as any).cancelTokens[key]();
+                    delete (window as any).cancelTokens[key];
+                });
+
+            return state;
+        },
         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 ? {