15768: multimove processes works Arvados-DCO-1.1-Signed-off-by: Lisa Knox <lisa.knox...
[arvados.git] / src / store / workbench / workbench-actions.ts
index 6182a314d8d735aacf34d5833f4c57473c044a97..9b928ce30d03f6859a92189fd00bddeef0221ea0 100644 (file)
@@ -62,7 +62,7 @@ import { loadSiteManagerPanel } from "store/auth/auth-action-session";
 import { workflowPanelColumns } from "views/workflow-panel/workflow-panel-view";
 import { progressIndicatorActions } from "store/progress-indicator/progress-indicator-actions";
 import { getProgressIndicator } from "store/progress-indicator/progress-indicator-reducer";
-import { extractUuidKind, ResourceKind } from "models/resource";
+import { extractUuidKind, Resource, ResourceKind } from "models/resource";
 import { FilterBuilder } from "services/api/filter-builder";
 import { GroupContentsResource } from "services/groups-service/groups-service";
 import { MatchCases, ofType, unionize, UnionOf } from "common/unionize";
@@ -279,40 +279,42 @@ export const createProject = (data: projectCreateActions.ProjectCreateFormDialog
 };
 
 export const moveProject = (data: MoveToFormDialogData) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
-    const projectsToMove: string[] = selectedToArray(getState().multiselect.checkedList);
+    const itemsToMove: string[] = selectedToArray(getState().multiselect.checkedList);
     //if no items in checkedlist, default to normal context menu behavior
-    if (!projectsToMove.length) projectsToMove.push(data.uuid);
+    if (!itemsToMove.length) itemsToMove.push(data.uuid);
     const sourceUuid = getResource(data.uuid)(getState().resources)?.ownerUuid;
     const destinationUuid = data.ownerUuid;
 
-    for (const projectUuid of projectsToMove) {
-        await moveSingleProject(projectUuid);
+    for (const uuid of itemsToMove) {
+        await moveSingleProject(uuid);
     }
 
-    async function moveSingleProject(projectUuid) {
-        try {
-            const originalProject = getResource(projectUuid)(getState().resources);
-            const oldProject = { ...originalProject, ownerUuid: data.ownerUuid } as any;
-            const oldOwnerUuid = oldProject ? oldProject.ownerUuid : "";
-            const movedProject = await dispatch<any>(projectMoveActions.moveProject(oldProject));
-            if (movedProject) {
+    async function moveSingleProject(uuid) {
+        const originalItem = getResource(uuid)(getState().resources) as Resource & { name: string };
+        if (originalItem.kind === ResourceKind.PROJECT) {
+            try {
+                const oldProject: MoveToFormDialogData = { name: originalItem.name, uuid: originalItem.uuid, ownerUuid: data.ownerUuid };
+                const oldOwnerUuid = oldProject ? oldProject.ownerUuid : "";
+                const movedProject = await dispatch<any>(projectMoveActions.moveProject(oldProject));
+                if (movedProject) {
+                    dispatch(
+                        snackbarActions.OPEN_SNACKBAR({
+                            message: "Project has been moved",
+                            hideDuration: 2000,
+                            kind: SnackbarKind.SUCCESS,
+                        })
+                    );
+                    await dispatch<any>(reloadProjectMatchingUuid([oldOwnerUuid, movedProject.ownerUuid, movedProject.uuid]));
+                }
+            } catch (e) {
                 dispatch(
                     snackbarActions.OPEN_SNACKBAR({
-                        message: "Project has been moved",
+                        message: e.message,
                         hideDuration: 2000,
-                        kind: SnackbarKind.SUCCESS,
+                        kind: SnackbarKind.ERROR,
                     })
                 );
-                await dispatch<any>(reloadProjectMatchingUuid([oldOwnerUuid, movedProject.ownerUuid, movedProject.uuid]));
             }
-        } catch (e) {
-            dispatch(
-                snackbarActions.OPEN_SNACKBAR({
-                    message: e.message,
-                    hideDuration: 2000,
-                    kind: SnackbarKind.ERROR,
-                })
-            );
         }
     }
     if (sourceUuid) await dispatch<any>(loadSidePanelTreeProjects(sourceUuid));
@@ -526,25 +528,39 @@ export const updateProcess = (data: processUpdateActions.ProcessUpdateFormDialog
 };
 
 export const moveProcess = (data: MoveToFormDialogData) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
-    try {
-        const process = await dispatch<any>(processMoveActions.moveProcess(data));
-        dispatch<any>(updateResources([process]));
-        dispatch<any>(reloadProjectMatchingUuid([process.ownerUuid]));
-        dispatch(
-            snackbarActions.OPEN_SNACKBAR({
-                message: "Process has been moved.",
-                hideDuration: 2000,
-                kind: SnackbarKind.SUCCESS,
-            })
-        );
-    } catch (e) {
-        dispatch(
-            snackbarActions.OPEN_SNACKBAR({
-                message: e.message,
-                hideDuration: 2000,
-                kind: SnackbarKind.ERROR,
-            })
-        );
+    const itemsToMove: string[] = selectedToArray(getState().multiselect.checkedList);
+    //if no items in checkedlist, default to normal context menu behavior
+    if (!itemsToMove.length) itemsToMove.push(data.uuid);
+
+    for (const uuid of itemsToMove) {
+        await moveSingleProcess(uuid);
+    }
+
+    async function moveSingleProcess(uuid) {
+        const originalItem = getResource(uuid)(getState().resources) as Resource & { name: string };
+        if (originalItem.kind === ResourceKind.PROCESS) {
+            try {
+                const oldProcess: MoveToFormDialogData = { name: originalItem.name, uuid: originalItem.uuid, ownerUuid: data.ownerUuid };
+                const process = await dispatch<any>(processMoveActions.moveProcess(oldProcess));
+                dispatch<any>(updateResources([process]));
+                dispatch<any>(reloadProjectMatchingUuid([process.ownerUuid]));
+                dispatch(
+                    snackbarActions.OPEN_SNACKBAR({
+                        message: "Process has been moved.",
+                        hideDuration: 2000,
+                        kind: SnackbarKind.SUCCESS,
+                    })
+                );
+            } catch (e) {
+                dispatch(
+                    snackbarActions.OPEN_SNACKBAR({
+                        message: e.message,
+                        hideDuration: 2000,
+                        kind: SnackbarKind.ERROR,
+                    })
+                );
+            }
+        }
     }
 };