18484: Improves CollectionService.get() to support "select".
[arvados-workbench2.git] / src / store / collections / collection-version-actions.ts
index fe8bd2d18cbe54437b694e275c480683445224cc..7d2511eda24d90368df29716c94157e090aeb10a 100644 (file)
@@ -3,34 +3,42 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { Dispatch } from "redux";
-import { RootState } from '~/store/store';
-import { ServiceRepository } from '~/services/services';
+import { RootState } from 'store/store';
+import { ServiceRepository } from 'services/services';
 import { snackbarActions, SnackbarKind } from "../snackbar/snackbar-actions";
 import { resourcesActions } from "../resources/resources-actions";
 import { navigateTo } from "../navigation/navigation-action";
 import { dialogActions } from "../dialog/dialog-actions";
+import { getResource } from "store/resources/resources";
+import { CollectionResource } from "models/collection";
 
-export const COLLECTION_RECOVER_VERSION_DIALOG = 'collectionRecoverVersionDialog';
+export const COLLECTION_RESTORE_VERSION_DIALOG = 'collectionRestoreVersionDialog';
 
-export const openRecoverCollectionVersionDialog = (uuid: string) =>
+export const openRestoreCollectionVersionDialog = (uuid: string) =>
     (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
         dispatch(dialogActions.OPEN_DIALOG({
-            id: COLLECTION_RECOVER_VERSION_DIALOG,
+            id: COLLECTION_RESTORE_VERSION_DIALOG,
             data: {
-                title: 'Recover version',
-                text: "Do you want to make this the new collection's head version? If you don't want to modify the current head version, you can just make a copy.",
-                confirmButtonLabel: 'Recover',
+                title: 'Restore version',
+                text: "This will copy the content of the selected version to the head. To make a new collection with the content of the selected version, use 'Make a copy' instead.",
+                confirmButtonLabel: 'Restore',
                 uuid
             }
         }));
     };
 
-export const recoverVersion = (resourceUuid: string) =>
+export const restoreVersion = (resourceUuid: string) =>
     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
         try {
-            // Request que entire record because stored old versions usually
-            // don't include the manifest_text field.
-            const oldVersion = await services.collectionService.get(resourceUuid);
+            // Request the manifest text because stored old versions usually
+            // don't include them.
+            let oldVersion = getResource<CollectionResource>(resourceUuid)(getState().resources);
+            if (!oldVersion) {
+                oldVersion = await services.collectionService.get(resourceUuid);
+            }
+            const oldVersionManifest = await services.collectionService.get(resourceUuid, undefined, ['manifestText']);
+            oldVersion.manifestText = oldVersionManifest.manifestText;
+
             const { uuid, version, ...rest} = oldVersion;
             const headVersion = await services.collectionService.update(
                 oldVersion.currentVersionUuid,
@@ -40,7 +48,7 @@ export const recoverVersion = (resourceUuid: string) =>
             dispatch<any>(navigateTo(headVersion.uuid));
         } catch (e) {
             dispatch(snackbarActions.OPEN_SNACKBAR({
-                message: `Couldn't recover version: ${e.errors[0]}`,
+                message: `Couldn't restore version: ${e.errors[0]}`,
                 hideDuration: 2000,
                 kind: SnackbarKind.ERROR
             }));