21128: workflows handled Arvados-DCO-1.1-Signed-off-by: Lisa Knox <lisa.knox@curii...
authorLisa Knox <lisaknox83@gmail.com>
Tue, 28 Nov 2023 17:44:50 +0000 (12:44 -0500)
committerLisa Knox <lisaknox83@gmail.com>
Tue, 28 Nov 2023 17:44:50 +0000 (12:44 -0500)
src/components/multiselect-toolbar/MultiselectToolbar.tsx
src/components/multiselect-toolbar/ms-toolbar-action-filters.ts
src/views-components/multiselect-toolbar/ms-menu-actions.ts
src/views-components/multiselect-toolbar/ms-workflow-action-set.ts

index 551a4edca68494e81537f13f67feae43476d9018..f7e75c0e4a1bf5cf2a8a558ba3fbe7c3df4072f0 100644 (file)
@@ -145,7 +145,7 @@ function filterActions(actionArray: MultiSelectMenuActionSet, filters: Set<strin
     return actionArray[0].filter(action => filters.has(action.name as string));
 }
 
-const resourceSubKind = (uuid: string, resources: ResourcesState) => {
+const resourceSubKind = (uuid: string, resources: ResourcesState): (msResourceKind | ResourceKind)[] => {
     const resource = getResource(uuid)(resources) as ContainerRequestResource | Resource;
     switch (resource.kind) {
         case ResourceKind.PROJECT:
@@ -153,6 +153,9 @@ const resourceSubKind = (uuid: string, resources: ResourcesState) => {
             if((resource as ProjectResource).canWrite === false) return [msResourceKind.PROJECT_READONLY]
             if((resource as ProjectResource).groupClass === "filter") return [msResourceKind.PROJECT_FILTER]
             return [msResourceKind.PROJECT]
+        case ResourceKind.WORKFLOW:
+            if((resource as ProjectResource).canWrite === false) return [msResourceKind.WORKFLOW_READONLY]
+            return [msResourceKind.WORKFLOW]
         default:
             return [resource.kind]
     }
index e494d8028d270ecc099eb6fd29bd31589dbefec4..32453fd422078d3f381355b87785683228ebedf2 100644 (file)
@@ -6,7 +6,7 @@ import { MultiSelectMenuActionSet, MultiSelectMenuActionNames } from 'views-comp
 import { msCollectionActionSet } from 'views-components/multiselect-toolbar/ms-collection-action-set';
 import { msProjectActionSet, msProjectActionFilter, msReadOnlyProjectActionFilter, msFilterGroupActionFilter, msFrozenActionFilter } from 'views-components/multiselect-toolbar/ms-project-action-set';
 import { msProcessActionSet } from 'views-components/multiselect-toolbar/ms-process-action-set';
-import { msWorkflowActionSet, msWorkflowActionFilter } from 'views-components/multiselect-toolbar/ms-workflow-action-set';
+import { msWorkflowActionSet, msWorkflowActionFilter, msReadOnlyWorkflowActionFilter } from 'views-components/multiselect-toolbar/ms-workflow-action-set';
 
 export type TMultiselectActionsFilters = Record<string, [MultiSelectMenuActionSet, Set<string>]>;
 
@@ -21,8 +21,6 @@ const allActionNames = (actionSet: MultiSelectMenuActionSet): Set<string> => new
 
 const processResourceMSActionsFilter = new Set([MOVE_TO, REMOVE]);
 
-
-
 export enum msResourceKind {
     API_CLIENT_AUTHORIZATION = "arvados#apiClientAuthorization",
     COLLECTION = "arvados#collection",
@@ -42,10 +40,11 @@ export enum msResourceKind {
     USER = "arvados#user",
     VIRTUAL_MACHINE = "arvados#virtualMachine",
     WORKFLOW = "arvados#workflow",
+    WORKFLOW_READONLY = "arvados#workflow_readonly",
     NONE = "arvados#none"
 }
 
-const { COLLECTION, PROCESS, PROJECT, PROJECT_FROZEN, PROJECT_READONLY,PROJECT_FILTER, WORKFLOW } = msResourceKind;
+const { COLLECTION, PROCESS, PROJECT, PROJECT_FROZEN, PROJECT_READONLY, PROJECT_FILTER, WORKFLOW, WORKFLOW_READONLY } = msResourceKind;
 
 export const multiselectActionsFilters: TMultiselectActionsFilters = {
     [COLLECTION]: [msCollectionActionSet, allActionNames(msCollectionActionSet)],
@@ -54,6 +53,7 @@ export const multiselectActionsFilters: TMultiselectActionsFilters = {
     [PROJECT_FROZEN]: [msProjectActionSet, msFrozenActionFilter],
     [PROJECT_READONLY]: [msProjectActionSet, msReadOnlyProjectActionFilter],
     [PROJECT_FILTER]: [msProjectActionSet, msFilterGroupActionFilter],
-    [WORKFLOW]: [msWorkflowActionSet, msWorkflowActionFilter]
+    [WORKFLOW]: [msWorkflowActionSet, msWorkflowActionFilter],
+    [WORKFLOW_READONLY]: [msWorkflowActionSet, msReadOnlyWorkflowActionFilter]
 };
 
index 2e54a6980b5a60bba6671b668b2c91b299307bc7..b7761d1ef843945e5f1a7463558a74222b368d55 100644 (file)
@@ -23,7 +23,7 @@ export const MultiSelectMenuActionNames: Record<string, string> = {
     API_DETAILS: 'API Details',
     COPY_AND_RERUN_PROCESS: 'Copy and re-run process',
     COPY_TO_CLIPBOARD: 'Copy to clipboard',
-    DELETE_WORKFLOW: 'DELETE_WORKFLOW',
+    DELETE_WORKFLOW: 'Delete Worflow',
     EDIT_PPROJECT: 'Edit project',
     FREEZE_PROJECT: 'Freeze Project',
     MAKE_A_COPY: 'Make a copy',
@@ -32,7 +32,7 @@ export const MultiSelectMenuActionNames: Record<string, string> = {
     OPEN_IN_NEW_TAB: 'Open in new tab',
     OPEN_W_3RD_PARTY_CLIENT: 'Open with 3rd party client',
     REMOVE: 'Remove',
-    RUN_WORKFLOW: 'RUN_WORKFLOW',
+    RUN_WORKFLOW: 'Run Workflow',
     SHARE: 'Share',
     VIEW_DETAILS: 'View details',
 };
index 5b38c2aa96f056a1082c75045f617dc9a04a3e4a..4095828de27bfed8b8cbbce5453cff7999a5b298 100644 (file)
@@ -3,78 +3,32 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { openRunProcess, deleteWorkflow } from 'store/workflow-panel/workflow-panel-actions';
-import { DetailsIcon, AdvancedIcon, OpenIcon, Link, StartIcon, TrashIcon } from 'components/icon/icon';
-import { copyToClipboardAction, openInNewTabAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
-import { toggleDetailsPanel } from 'store/details-panel/details-panel-action';
-import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
-import { MultiSelectMenuActionSet, MultiSelectMenuActionNames } from './ms-menu-actions';
+import { StartIcon, TrashIcon } from 'components/icon/icon';
+import { MultiSelectMenuAction, MultiSelectMenuActionSet, MultiSelectMenuActionNames, msCommonActionSet } from './ms-menu-actions';
 
 const { OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW, DELETE_WORKFLOW } = MultiSelectMenuActionNames;
 
-export const msReadOnlyWorkflowActionSet: MultiSelectMenuActionSet = [
-    [
-        {
-            name: OPEN_IN_NEW_TAB,
-            icon: OpenIcon,
-            hasAlts: false,
-            isForMulti: false,
-            execute: (dispatch, resources) => {
-                dispatch<any>(openInNewTabAction(resources[0]));
-            },
-        },
-        {
-            name: COPY_TO_CLIPBOARD,
-            icon: Link,
+const msRunWorkflow: MultiSelectMenuAction = {
+    name: RUN_WORKFLOW,
+    icon: StartIcon,
+    hasAlts: false,
+    isForMulti: false,
+    execute: (dispatch, resources) => {
+        dispatch<any>(openRunProcess(resources[0].uuid, resources[0].ownerUuid, resources[0].name));
+    },
+};
 
-            hasAlts: false,
-            isForMulti: false,
-            execute: (dispatch, resources) => {
-                dispatch<any>(copyToClipboardAction(resources));
-            },
-        },
-        {
-            name: VIEW_DETAILS,
-            icon: DetailsIcon,
-            hasAlts: false,
-            isForMulti: false,
-            execute: (dispatch) => {
-                dispatch<any>(toggleDetailsPanel());
-            },
-        },
-        {
-            name: API_DETAILS,
-            icon: AdvancedIcon,
-            hasAlts: false,
-            isForMulti: false,
-            execute: (dispatch, resources) => {
-                dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
-            },
-        },
-        {
-            name: RUN_WORKFLOW,
-            icon: StartIcon,
-            hasAlts: false,
-            isForMulti: false,
-            execute: (dispatch, resources) => {
-                dispatch<any>(openRunProcess(resources[0].uuid, resources[0].ownerUuid, resources[0].name));
-            },
-        },
-    ],
-];
+const msDeleteWorkflow: MultiSelectMenuAction = {
+    name: DELETE_WORKFLOW,
+    icon: TrashIcon,
+    hasAlts: false,
+    isForMulti: false,
+    execute: (dispatch, resources) => {
+        dispatch<any>(deleteWorkflow(resources[0].uuid, resources[0].ownerUuid));
+    },
+};
 
-export const msWorkflowActionSet: MultiSelectMenuActionSet = [
-    [
-        ...msReadOnlyWorkflowActionSet[0],
-        {
-            name: DELETE_WORKFLOW,
-            icon: TrashIcon,
-            hasAlts: false,
-            isForMulti: false,
-            execute: (dispatch, resources) => {
-                dispatch<any>(deleteWorkflow(resources[0].uuid, resources[0].ownerUuid));
-            },
-        },
-    ],
-];
+export const msWorkflowActionSet: MultiSelectMenuActionSet = [[...msCommonActionSet, msRunWorkflow, msDeleteWorkflow]];
 
+export const msReadOnlyWorkflowActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW ]);
 export const msWorkflowActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW, DELETE_WORKFLOW]);