21448: divider in place for context menu Arvados-DCO-1.1-Signed-off-by: Lisa Knox...
authorLisa Knox <lisaknox83@gmail.com>
Fri, 29 Mar 2024 17:54:48 +0000 (13:54 -0400)
committerLisa Knox <lisaknox83@gmail.com>
Fri, 29 Mar 2024 17:54:48 +0000 (13:54 -0400)
services/workbench2/src/components/multiselect-toolbar/MultiselectToolbar.tsx
services/workbench2/src/views-components/context-menu/actions/context-menu-divider.tsx [new file with mode: 0644]
services/workbench2/src/views-components/context-menu/context-menu-action-set.ts
services/workbench2/src/views-components/context-menu/context-menu.tsx
services/workbench2/src/views-components/context-menu/menu-item-sort.ts

index 5b39e925bf07a1e3ff415929c7a1124c5837d6a3..ec3db484b44635af8c0cc73c602955aed33c574e 100644 (file)
@@ -97,7 +97,6 @@ export const MultiselectToolbar = connect(
     withStyles(styles)((props: MultiselectToolbarProps & WithStyles<CssRules>) => {
         const { classes, checkedList, singleSelectedUuid, iconProps, user, disabledButtons } = props;
         const singleResourceKind = singleSelectedUuid ? [resourceToMsResourceKind(singleSelectedUuid, iconProps.resources, user)] : null
-        console.log(singleResourceKind)
         const currentResourceKinds = singleResourceKind ? singleResourceKind : Array.from(selectedToKindSet(checkedList));
         const currentPathIsTrash = window.location.pathname === "/trash";
         const [isTransitioning, setIsTransitioning] = useState(false);
diff --git a/services/workbench2/src/views-components/context-menu/actions/context-menu-divider.tsx b/services/workbench2/src/views-components/context-menu/actions/context-menu-divider.tsx
new file mode 100644 (file)
index 0000000..439f594
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import React from 'react';
+import { ContextMenuAction } from '../context-menu-action-set';
+import { Divider as DividerComponent, StyleRulesCallback, withStyles } from '@material-ui/core';
+import { WithStyles } from '@material-ui/core/styles';
+
+type CssRules = 'root';
+
+const styles:StyleRulesCallback<CssRules> = () => ({
+  root: {
+      backgroundColor: 'black',
+  },
+});
+
+type DividerProps = {
+  orthogonality: 'vertical' | 'horizontal';
+};
+
+export const Divider = withStyles(styles)((props: DividerProps & WithStyles<CssRules>) => {
+  return  <DividerComponent variant='middle' className={props.classes.root} />;
+});
+
+export const menuDivider: ContextMenuAction = {
+  name: 'divider',
+  component: Divider,
+  execute: () => null,
+};
\ No newline at end of file
index 560a04bebd67a0ee0b6554a3ad156c15d653fe88..d67c4ea7f8ff1c6abf17914010b86f09273c0d26 100644 (file)
@@ -23,6 +23,7 @@ export enum ContextMenuActionNames {
     COPY_TO_CLIPBOARD = 'Copy link to clipboard',
     DEACTIVATE_USER = 'Deactivate user',
     DELETE_WORKFLOW = 'Delete Workflow',
+    DIVIDER = 'Divider',
     DOWNLOAD = 'Download',
     EDIT_COLLECTION = 'Edit collection',
     EDIT_PROCESS = 'Edit process',
index 6314ba97ad984e716148fd4e75436f0afcef9ef3..89b75bbc4f4fe1a1a24550a29072b8dc6076d9fd 100644 (file)
@@ -10,7 +10,6 @@ import { createAnchorAt } from "components/popover/helpers";
 import { ContextMenuActionSet, ContextMenuAction } from "./context-menu-action-set";
 import { Dispatch } from "redux";
 import { memoize } from "lodash";
-import { sortByProperty } from "common/array-utils";
 import { sortMenuItems, ContextMenuKind } from "./menu-item-sort";
 
 type DataProps = Pick<ContextMenuProps, "anchorEl" | "items" | "open"> & { resource?: ContextMenuResource };
index 030f8801c385170a3f51cc3fee8283e69c0b341c..972f83bc0b67b57589f24ca348e6e553f743bae4 100644 (file)
@@ -4,7 +4,8 @@
 
 import { ContextMenuAction } from './context-menu-action-set';
 import { ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
-import { sortByProperty } from 'common/array-utils'; 
+import { sortByProperty } from 'common/array-utils';
+import { menuDivider } from './actions/context-menu-divider';
 
 export enum ContextMenuKind {
     API_CLIENT_AUTHORIZATION = "ApiClientAuthorization",
@@ -54,11 +55,14 @@ export enum ContextMenuKind {
     SEARCH_RESULTS = "SearchResults",
 }
 
+
+
 const processOrder = [
     ContextMenuActionNames.VIEW_DETAILS,
     ContextMenuActionNames.OPEN_IN_NEW_TAB,
     ContextMenuActionNames.OUTPUTS,
     ContextMenuActionNames.API_DETAILS,
+    ContextMenuActionNames.DIVIDER,
     ContextMenuActionNames.EDIT_PROCESS,
     ContextMenuActionNames.COPY_AND_RERUN_PROCESS,
     ContextMenuActionNames.MOVE_TO,
@@ -73,11 +77,13 @@ const projectOrder = [
     ContextMenuActionNames.COPY_TO_CLIPBOARD,
     ContextMenuActionNames.OPEN_WITH_3RD_PARTY_CLIENT,
     ContextMenuActionNames.API_DETAILS,
+    ContextMenuActionNames.DIVIDER,
     ContextMenuActionNames.NEW_PROJECT,
     ContextMenuActionNames.EDIT_PROJECT,
     ContextMenuActionNames.SHARE,
     ContextMenuActionNames.MOVE_TO,
     ContextMenuActionNames.REMOVE,
+    ContextMenuActionNames.DIVIDER,
     ContextMenuActionNames.FREEZE_PROJECT,
     ContextMenuActionNames.ADD_TO_FAVORITES,
     ContextMenuActionNames.ADD_TO_PUBLIC_FAVORITES,
@@ -89,12 +95,14 @@ const collectionOrder = [
     ContextMenuActionNames.COPY_TO_CLIPBOARD,
     ContextMenuActionNames.OPEN_WITH_3RD_PARTY_CLIENT,
     ContextMenuActionNames.API_DETAILS,
+    ContextMenuActionNames.DIVIDER,
     ContextMenuActionNames.NEW_COLLECTION,
     ContextMenuActionNames.EDIT_COLLECTION,
     ContextMenuActionNames.SHARE,
     ContextMenuActionNames.MOVE_TO,
     ContextMenuActionNames.MAKE_A_COPY,
     ContextMenuActionNames.MOVE_TO_TRASH,
+    ContextMenuActionNames.DIVIDER,
     ContextMenuActionNames.ADD_TO_FAVORITES,
     ContextMenuActionNames.ADD_TO_PUBLIC_FAVORITES,
 ];
@@ -104,6 +112,7 @@ const workflowOrder = [
     ContextMenuActionNames.OPEN_IN_NEW_TAB,
     ContextMenuActionNames.COPY_TO_CLIPBOARD,
     ContextMenuActionNames.API_DETAILS,
+    ContextMenuActionNames.DIVIDER,
     ContextMenuActionNames.RUN_WORKFLOW,
     ContextMenuActionNames.REMOVE,
 ]
@@ -138,8 +147,18 @@ export const sortMenuItems = (menuKind: ContextMenuKind, menuItems: ContextMenuA
     const bucketMap = new Map();
     const leftovers: ContextMenuAction[] = [];
 
-    preferredOrder.forEach((name) => bucketMap.set(name, null));
-    menuItems.forEach((item) => {
+    // if we have multiple dividers, we need each of them to have a different key
+    let count = 0;
+
+    preferredOrder.forEach((name) => {
+        if (name === ContextMenuActionNames.DIVIDER) {
+            count++;
+            bucketMap.set(`${name}-${count}`, menuDivider)
+        } else {
+            bucketMap.set(name, null)
+        }
+    });
+    [...menuItems].forEach((item) => {
         if (bucketMap.has(item.name)) bucketMap.set(item.name, item);
         else leftovers.push(item);
     });