21535: added wf delete dialog Arvados-DCO-1.1-Signed-off-by: Lisa Knox <lisa.knox...
authorLisa Knox <lisaknox83@gmail.com>
Mon, 13 May 2024 19:25:12 +0000 (15:25 -0400)
committerLisa Knox <lisaknox83@gmail.com>
Mon, 13 May 2024 19:25:12 +0000 (15:25 -0400)
services/workbench2/src/store/workflow-panel/workflow-panel-actions.ts
services/workbench2/src/views-components/multiselect-toolbar/ms-workflow-action-set.ts
services/workbench2/src/views-components/workflow-remove-dialog/workflow-remove-dialog.tsx [new file with mode: 0644]
services/workbench2/src/views/workbench/workbench.tsx

index ef1f23ec1fafdffa520e7a7d04540d530a35e3fc..5079c01dd08243e9daf75872222a034051f722fe 100644 (file)
@@ -24,6 +24,8 @@ import { getResource } from 'store/resources/resources';
 import { ProjectResource } from 'models/project';
 import { UserResource } from 'models/user';
 import { getWorkflowInputs, parseWorkflowDefinition } from 'models/workflow';
+import { ContextMenuResource } from 'store/context-menu/context-menu-actions'; 
+import { dialogActions } from 'store/dialog/dialog-actions';
 
 export const WORKFLOW_PANEL_ID = "workflowPanel";
 const UUID_PREFIX_PROPERTY_NAME = 'uuidPrefix';
@@ -127,3 +129,27 @@ export const deleteWorkflow = (workflowUuid: string, ownerUuid?: string) =>
         await services.workflowService.delete(workflowUuid);
         dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Removed.', hideDuration: 2000, kind: SnackbarKind.SUCCESS }));
     };
+
+export const openRemoveWorkflowDialog =
+(resource: ContextMenuResource, numOfWorkflows: Number) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+    const confirmationText =
+        numOfWorkflows === 1
+            ? "Are you sure you want to remove this workflow?"
+            : `Are you sure you want to remove these ${numOfWorkflows} workflows?`;
+    const titleText = numOfWorkflows === 1 ? "Remove workflow permanently" : "Remove workflows permanently";
+
+    dispatch(
+        dialogActions.OPEN_DIALOG({
+            id: REMOVE_WORKFLOW_DIALOG,
+            data: {
+                title: titleText,
+                text: confirmationText,
+                confirmButtonLabel: "Remove",
+                uuid: resource.uuid,
+                resource,
+            },
+        })
+    );
+};
+
+export const REMOVE_WORKFLOW_DIALOG = "removeWorkflowDialog";
\ No newline at end of file
index e0f46bf6ee16e15350d4ceec4221073665d54683..945aea13f16b25374892a4ce5ab80faf7b782ae0 100644 (file)
@@ -2,7 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { openRunProcess, deleteWorkflow } from 'store/workflow-panel/workflow-panel-actions';
+import { openRunProcess, openRemoveWorkflowDialog } from 'store/workflow-panel/workflow-panel-actions';
 import { StartIcon, DeleteForever, Link } from 'components/icon/icon';
 import { MultiSelectMenuAction, MultiSelectMenuActionSet, msCommonActionSet } from './ms-menu-actions';
 import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
@@ -27,7 +27,7 @@ const msDeleteWorkflow: MultiSelectMenuAction = {
     isForMulti: true,
     execute: (dispatch, resources) => {
         for (const resource of [...resources]){
-            dispatch<any>(deleteWorkflow(resource.uuid));
+            dispatch<any>(openRemoveWorkflowDialog(resource, resources.length));
         }
     },
 };
diff --git a/services/workbench2/src/views-components/workflow-remove-dialog/workflow-remove-dialog.tsx b/services/workbench2/src/views-components/workflow-remove-dialog/workflow-remove-dialog.tsx
new file mode 100644 (file)
index 0000000..7eb2f5e
--- /dev/null
@@ -0,0 +1,22 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { Dispatch, compose } from 'redux';
+import { connect } from "react-redux";
+import { ConfirmationDialog } from "components/confirmation-dialog/confirmation-dialog";
+import { withDialog, WithDialogProps } from "store/dialog/with-dialog";
+import { REMOVE_WORKFLOW_DIALOG } from 'store/workflow-panel/workflow-panel-actions';
+import { deleteWorkflow } from 'store/workflow-panel/workflow-panel-actions';
+
+const mapDispatchToProps = (dispatch: Dispatch, props: WithDialogProps<any>) => ({
+    onConfirm: () => {
+        props.closeDialog();
+        dispatch<any>(deleteWorkflow(props.data.uuid));
+    }
+});
+
+export const RemoveWorkflowDialog = compose(
+    withDialog(REMOVE_WORKFLOW_DIALOG),
+    connect(null, mapDispatchToProps)
+)(ConfirmationDialog);
index 3020e0d2987ccbd6a393a0b87100033ec83a9c01..3da00e492a430ce2f63ae4c874937f825b81ddc2 100644 (file)
@@ -39,6 +39,7 @@ import { PartialMoveToNewCollectionDialog } from "views-components/dialog-forms/
 import { PartialMoveToExistingCollectionDialog } from "views-components/dialog-forms/partial-move-to-existing-collection-dialog";
 import { PartialMoveToSeparateCollectionsDialog } from "views-components/dialog-forms/partial-move-to-separate-collections-dialog";
 import { RemoveProcessDialog } from "views-components/process-remove-dialog/process-remove-dialog";
+import { RemoveWorkflowDialog } from "views-components/workflow-remove-dialog/workflow-remove-dialog";
 import { MainContentBar } from "views-components/main-content-bar/main-content-bar";
 import { Grid } from "@material-ui/core";
 import { TrashPanel } from "views/trash-panel/trash-panel";
@@ -435,6 +436,7 @@ const { classes, sidePanelIsCollapsed, isNotLinking, isTransitioning, isUserActi
             <RemoveKeepServiceDialog />
             <RemoveLinkDialog />
             <RemoveProcessDialog />
+            <RemoveWorkflowDialog />
             <RemoveRepositoryDialog />
             <RemoveSshKeyDialog />
             <RemoveVirtualMachineDialog />