Merge branch '17016-delete-single-file-deletes-whole-collection'
authorDaniel Kutyła <daniel.kutyla@contractors.roche.com>
Mon, 11 Jan 2021 15:58:44 +0000 (16:58 +0100)
committerDaniel Kutyła <daniel.kutyla@contractors.roche.com>
Mon, 11 Jan 2021 15:58:44 +0000 (16:58 +0100)
closes #17016

Arvados-DCO-1.1-Signed-off-by: Daniel Kutyła <daniel.kutyla@contractors.roche.com>

1  2 
src/services/collection-service/collection-service.ts
src/store/collection-panel/collection-panel-files/collection-panel-files-actions.ts

index 04c01a113e8852a02be4c034d4334bdc236bdc78,5ae03b89eb0f816c7f595d322dadd1000d94b8cd..c46c3e27764470f1c214cc4ff82200d612b6a8c4
@@@ -44,16 -36,25 +44,26 @@@ export class CollectionService extends 
      }
  
      async deleteFiles(collectionUuid: string, filePaths: string[]) {
-         if (collectionUuid === "" || filePaths.length === 0) { return; }
-         for (const path of filePaths) {
-             const splittedPath = path.split('/');
-             if (collectionUuid) {
-                 await this.webdavClient.delete(`c=${collectionUuid}/${splittedPath[1]}`);
-             } else {
+         const sortedUniquePaths = Array.from(new Set(filePaths))
+             .sort((a, b) => a.length - b.length)
+             .reduce((acc, currentPath) => {
+                 const parentPathFound = acc.find((parentPath) => currentPath.indexOf(`${parentPath}/`) > -1);
+                 if (!parentPathFound) {
+                     return [...acc, currentPath];
+                 }
+                 return acc;
+             }, []);
+         for (const path of sortedUniquePaths) {
+             if (path.indexOf(collectionUuid) === -1) {
                  await this.webdavClient.delete(`c=${collectionUuid}${path}`);
+             } else {
+                 await this.webdavClient.delete(`c=${path}`);
              }
          }
 +        await this.update(collectionUuid, { preserveVersion: true });
      }
  
      async uploadFiles(collectionUuid: string, files: File[], onProgress?: UploadProgress) {
index 80d61ea04cb3efbf42c1904a223d5165c45c7d44,373ee04eec06e3735d5c469668352394c274de85..c7a3bdc50372fdd457de1df63b7523174592f1ea
@@@ -42,12 -42,13 +42,13 @@@ export const loadCollectionFiles = (uui
              const mapped = mapTreeValues(services.collectionService.extendFileURL)(sorted);
              dispatch(collectionPanelFilesAction.SET_COLLECTION_FILES(mapped));
              dispatch(progressIndicatorActions.STOP_WORKING(COLLECTION_PANEL_LOAD_FILES));
 -        }).catch(e => {
 +        }).catch(() => {
              dispatch(progressIndicatorActions.STOP_WORKING(COLLECTION_PANEL_LOAD_FILES));
              dispatch(snackbarActions.OPEN_SNACKBAR({
 -                message: `Error getting file list: ${e.errors[0]}`,
 +                message: `Error getting file list`,
                  hideDuration: 2000,
-                 kind: SnackbarKind.ERROR }));
+                 kind: SnackbarKind.ERROR
+             }));
          });
      };