X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/f0a64666816383d2641d5fa7ea22019441ac4464..a74d278febca225076a72413a8343e13f5488a58:/src/store/collections/collection-partial-copy-actions.ts diff --git a/src/store/collections/collection-partial-copy-actions.ts b/src/store/collections/collection-partial-copy-actions.ts index 72374e65..09c6bb66 100644 --- a/src/store/collections/collection-partial-copy-actions.ts +++ b/src/store/collections/collection-partial-copy-actions.ts @@ -61,8 +61,15 @@ export const copyCollectionPartial = ({ name, description, projectUuid }: Collec manifestText: collection.manifestText, }; const newCollection = await services.collectionService.create(collectionCopy); - const paths = filterCollectionFilesBySelection(state.collectionPanelFiles, false).map(file => file.id); - await services.collectionService.deleteFiles(newCollection.uuid, paths); + const copiedFiles = await services.collectionService.files(newCollection.uuid); + const paths = filterCollectionFilesBySelection(state.collectionPanelFiles, true).map(file => file.id); + const filesToDelete = copiedFiles.map(({ id }) => id).filter(file => { + return !paths.find(path => path.indexOf(file.replace(newCollection.uuid, '')) > -1); + }); + await services.collectionService.deleteFiles( + '', + filesToDelete + ); dispatch(dialogActions.CLOSE_DIALOG({ id: COLLECTION_PARTIAL_COPY_FORM_NAME })); dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'New collection created.', @@ -105,6 +112,13 @@ export const copyCollectionPartialToSelectedCollection = ({ collectionUuid }: Co dispatch(startSubmit(COLLECTION_PARTIAL_COPY_TO_SELECTED_COLLECTION)); const state = getState(); const currentCollection = state.collectionPanel.item; + + if (currentCollection && !currentCollection.manifestText) { + const fetchedCurrentCollection = await services.collectionService.get(currentCollection.uuid); + currentCollection.manifestText = fetchedCurrentCollection.manifestText; + currentCollection.unsignedManifestText = fetchedCurrentCollection.unsignedManifestText; + } + if (currentCollection) { try { dispatch(progressIndicatorActions.START_WORKING(COLLECTION_PARTIAL_COPY_TO_SELECTED_COLLECTION)); @@ -120,10 +134,10 @@ export const copyCollectionPartialToSelectedCollection = ({ collectionUuid }: Co } }); const diffPathToRemove = _.difference(paths, pathsToRemove); - await services.collectionService.deleteFiles(selectedCollection.uuid, pathsToRemove); + await services.collectionService.deleteFiles(selectedCollection.uuid, pathsToRemove.map(path => path.replace(currentCollection.uuid, collectionUuid))); const collectionWithDeletedFiles = await services.collectionService.get(collectionUuid); - await services.collectionService.update(collectionUuid, { manifestText: `${collectionWithDeletedFiles.manifestText}${currentCollection.manifestText ? currentCollection.manifestText : currentCollection.unsignedManifestText}` }); - await services.collectionService.deleteFiles(collectionWithDeletedFiles.uuid, diffPathToRemove); + await services.collectionService.update(collectionUuid, { manifestText: `${collectionWithDeletedFiles.manifestText}${(currentCollection.manifestText ? currentCollection.manifestText : currentCollection.unsignedManifestText) || ''}` }); + await services.collectionService.deleteFiles(collectionWithDeletedFiles.uuid, diffPathToRemove.map(path => path.replace(currentCollection.uuid, collectionUuid))); dispatch(dialogActions.CLOSE_DIALOG({ id: COLLECTION_PARTIAL_COPY_TO_SELECTED_COLLECTION })); dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Files has been copied to selected collection.',