21128: frozen project menu works Arvados-DCO-1.1-Signed-off-by: Lisa Knox <lisa.knox...
authorLisa Knox <lisaknox83@gmail.com>
Mon, 27 Nov 2023 20:10:26 +0000 (15:10 -0500)
committerLisa Knox <lisaknox83@gmail.com>
Mon, 27 Nov 2023 20:10:26 +0000 (15:10 -0500)
src/components/multiselect-toolbar/MultiselectToolbar.tsx
src/components/multiselect-toolbar/ms-toolbar-action-filters.ts
src/views-components/multiselect-toolbar/ms-project-action-set.ts

index dbc5e59eafde9dce5ebe05502169f5b030356cfd..51fe437530ea80b8ff017cadebdbb9864d9a5b75 100644 (file)
@@ -10,17 +10,18 @@ import { RootState } from "store/store";
 import { Dispatch } from "redux";
 import { TCheckedList } from "components/data-table/data-table";
 import { ContextMenuResource } from "store/context-menu/context-menu-actions";
-import { Resource, extractUuidKind } from "models/resource";
+import { Resource, ResourceKind, extractUuidKind } from "models/resource";
 import { getResource } from "store/resources/resources";
 import { ResourcesState } from "store/resources/resources";
 import { MultiSelectMenuAction, MultiSelectMenuActionSet, MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
 import { ContextMenuAction } from "views-components/context-menu/context-menu-action-set";
-import { multiselectActionsFilters, TMultiselectActionsFilters } from "./ms-toolbar-action-filters";
+import { multiselectActionsFilters, TMultiselectActionsFilters, msResourceKind } from "./ms-toolbar-action-filters";
 import { kindToActionSet, findActionByName } from "./ms-kind-action-differentiator";
 import { msToggleTrashAction } from "views-components/multiselect-toolbar/ms-project-action-set";
 import { copyToClipboardAction } from "store/open-in-new-tab/open-in-new-tab.actions";
 import { ContainerRequestResource } from "models/container-request";
 import { FavoritesState } from "store/favorites/favorites-reducer";
+import { resourceIsFrozen } from "common/frozen-resources";
 
 type CssRules = "root" | "button";
 
@@ -58,14 +59,16 @@ export const MultiselectToolbar = connect(
 )(
     withStyles(styles)((props: MultiselectToolbarProps & WithStyles<CssRules>) => {
         const { classes, checkedList, selectedUuid: singleSelectedUuid, iconProps } = props;
-        const currentResourceKinds = Array.from(selectedToKindSet(checkedList));
+        const singleProjectKind = singleSelectedUuid ? resourceSubKind(singleSelectedUuid, iconProps.resources) : ''
+        const currentResourceKinds = singleProjectKind ? singleProjectKind :Array.from(selectedToKindSet(checkedList));
 
         const currentPathIsTrash = window.location.pathname === "/trash";
 
+
         const actions =
             currentPathIsTrash && selectedToKindSet(checkedList).size
                 ? [msToggleTrashAction]
-                : selectActionsByKind(currentResourceKinds, multiselectActionsFilters)
+                : selectActionsByKind(currentResourceKinds as string[], multiselectActionsFilters)
                 .filter((action) => (singleSelectedUuid === null ? action.isForMulti : true));
 
         return (
@@ -141,6 +144,17 @@ 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 resource = getResource(uuid)(resources) as ContainerRequestResource | Resource;
+    switch (resource.kind) {
+        case ResourceKind.PROJECT:
+            if(resourceIsFrozen(resource, resources)) return [msResourceKind.PROJECT_FROZEN]
+            return [msResourceKind.PROJECT]
+        default:
+            return resource.kind
+    }
+}; 
+
 function selectActionsByKind(currentResourceKinds: Array<string>, filterSet: TMultiselectActionsFilters) {
     const rawResult: Set<MultiSelectMenuAction> = new Set();
     const resultNames = new Set();
index 9ad80f7dfc21606ab17c5f7144ca54406c06e995..4f4a60b892cb744873932882ef905e5f44f5d8c3 100644 (file)
@@ -2,10 +2,9 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { ResourceKind } from 'models/resource';
 import { MultiSelectMenuActionSet, MultiSelectMenuActionNames } from 'views-components/multiselect-toolbar/ms-menu-actions';
 import { msCollectionActionSet } from 'views-components/multiselect-toolbar/ms-collection-action-set';
-import { msProjectActionSet } from 'views-components/multiselect-toolbar/ms-project-action-set';
+import { msProjectActionSet, msReadOnlyProjectActionSet, msFilterGroupActionSet, msFrozenActionSet } from 'views-components/multiselect-toolbar/ms-project-action-set';
 import { msProcessActionSet } from 'views-components/multiselect-toolbar/ms-process-action-set';
 import { msWorkflowActionSet } from 'views-components/multiselect-toolbar/ms-workflow-action-set';
 
@@ -55,12 +54,34 @@ const projectMSActionsFilter = new Set([
 ]);
 const workflowMSActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW, DELETE_WORKFLOW]);
 
-const { COLLECTION, PROCESS, PROJECT, WORKFLOW } = ResourceKind;
+
+export enum msResourceKind {
+    API_CLIENT_AUTHORIZATION = "arvados#apiClientAuthorization",
+    COLLECTION = "arvados#collection",
+    CONTAINER = "arvados#container",
+    CONTAINER_REQUEST = "arvados#containerRequest",
+    GROUP = "arvados#group",
+    LINK = "arvados#link",
+    LOG = "arvados#log",
+    PROCESS = "arvados#containerRequest",
+    PROJECT = "arvados#group",
+    PROJECT_FROZEN = "arvados#group_frozen",
+    REPOSITORY = "arvados#repository",
+    SSH_KEY = "arvados#authorizedKeys",
+    KEEP_SERVICE = "arvados#keepService",
+    USER = "arvados#user",
+    VIRTUAL_MACHINE = "arvados#virtualMachine",
+    WORKFLOW = "arvados#workflow",
+    NONE = "arvados#none"
+}
+
+const { COLLECTION, PROCESS, PROJECT, PROJECT_FROZEN, WORKFLOW } = msResourceKind;
 
 export const multiselectActionsFilters: TMultiselectActionsFilters = {
     [COLLECTION]: [msCollectionActionSet, allActionNames(msCollectionActionSet)],
     [PROCESS]: [msProcessActionSet, processResourceMSActionsFilter],
     [PROJECT]: [msProjectActionSet, projectMSActionsFilter],
+    [PROJECT_FROZEN]: [msProjectActionSet, allActionNames(msFrozenActionSet)],
     [WORKFLOW]: [msWorkflowActionSet, workflowMSActionFilter]
 };
 
index 115c4ce97c18039a9212607577ba8bd4730040de..5d16da91aa626149026127222957ba44eabe395a 100644 (file)
@@ -2,7 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { MultiSelectMenuAction, MultiSelectMenuActionNames } from 'views-components/multiselect-toolbar/ms-menu-actions';
+import { MultiSelectMenuActionSet, MultiSelectMenuActionNames } from 'views-components/multiselect-toolbar/ms-menu-actions';
 import { openMoveProjectDialog } from 'store/projects/project-move-actions';
 import { toggleProjectTrashed } from 'store/trash/trash-actions';
 import { copyToClipboardAction, openInNewTabAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
@@ -177,9 +177,8 @@ export const msNewProjectAction: any = {
     },
 };
 
-export const msProjectActionSet: MultiSelectMenuAction[][] = [
+export const msProjectActionSet: MultiSelectMenuActionSet = [
     [
-        msCopyToClipboardMenuAction,
         msToggleFavoriteAction,
         msOpenInNewTabMenuAction,
         msCopyToClipboardMenuAction,
@@ -190,7 +189,39 @@ export const msProjectActionSet: MultiSelectMenuAction[][] = [
         msShareAction,
         msMoveToAction,
         msToggleTrashAction,
-        msFreezeProjectAction,
         msNewProjectAction,
+        msFreezeProjectAction,
+    ],
+];
+
+export const msReadOnlyProjectActionSet: MultiSelectMenuActionSet = [
+    [msToggleFavoriteAction, msOpenInNewTabMenuAction, msCopyToClipboardMenuAction, msViewDetailsAction, msAdvancedAction, msOpenWith3rdPartyClientAction],
+];
+
+export const msFilterGroupActionSet: MultiSelectMenuActionSet = [
+    [
+        msToggleFavoriteAction,
+        msOpenInNewTabMenuAction,
+        msCopyToClipboardMenuAction,
+        msViewDetailsAction,
+        msAdvancedAction,
+        msOpenWith3rdPartyClientAction,
+        msEditProjectAction,
+        msShareAction,
+        msMoveToAction,
+        msToggleTrashAction,
     ],
 ];
+
+export const msFrozenActionSet: MultiSelectMenuActionSet = [
+    [
+        msShareAction,
+        msToggleFavoriteAction,
+        msOpenInNewTabMenuAction,
+        msCopyToClipboardMenuAction,
+        msViewDetailsAction,
+        msAdvancedAction,
+        msOpenWith3rdPartyClientAction,
+        msFreezeProjectAction,
+    ],
+];
\ No newline at end of file