X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/4d2f28ce28f9a6ff5018a4a0c5200ee4bfb277e2..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 65561aa4..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.', @@ -72,7 +79,7 @@ export const copyCollectionPartial = ({ name, description, projectUuid }: Collec dispatch(progressIndicatorActions.STOP_WORKING(COLLECTION_PARTIAL_COPY_FORM_NAME)); } catch (e) { const error = getCommonResourceServiceError(e); - if (error === CommonResourceServiceError.UNIQUE_VIOLATION) { + if (error === CommonResourceServiceError.UNIQUE_NAME_VIOLATION) { dispatch(stopSubmit(COLLECTION_PARTIAL_COPY_FORM_NAME, { name: 'Collection with this name already exists.' } as FormErrors)); } else if (error === CommonResourceServiceError.UNKNOWN) { dispatch(dialogActions.CLOSE_DIALOG({ id: COLLECTION_PARTIAL_COPY_FORM_NAME })); @@ -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.',