// SPDX-License-Identifier: AGPL-3.0
import { connect } from "react-redux";
-import { RootState } from "~/store/store";
-import { contextMenuActions, ContextMenuResource } from "~/store/context-menu/context-menu-actions";
-import { ContextMenu as ContextMenuComponent, ContextMenuProps, ContextMenuItem } from "~/components/context-menu/context-menu";
-import { createAnchorAt } from "~/components/popover/helpers";
+import { RootState } from "store/store";
+import { contextMenuActions, ContextMenuResource } from "store/context-menu/context-menu-actions";
+import { ContextMenu as ContextMenuComponent, ContextMenuProps, ContextMenuItem } from "components/context-menu/context-menu";
+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 { sortByProperty } from "common/array-utils";
type DataProps = Pick<ContextMenuProps, "anchorEl" | "items" | "open"> & { resource?: ContextMenuResource };
const mapStateToProps = (state: RootState): DataProps => {
const { open, position, resource } = state.contextMenu;
+
+ const filteredItems = getMenuActionSet(resource).map((group) => (group.filter((item) => {
+ if (resource && item.filters) {
+ // Execute all filters on this item, every returns true IFF all filters return true
+ return item.filters.every((filter) => filter(state, resource));
+ } else {
+ return true;
+ }
+ })));
+
return {
anchorEl: resource ? createAnchorAt(position) : undefined,
- items: getMenuActionSet(resource),
+ items: filteredItems,
open,
resource
};
};
const emptyActionSet: ContextMenuActionSet = [];
-const getMenuActionSet = (resource?: ContextMenuResource): ContextMenuActionSet => {
- return resource ? menuActionSets.get(resource.menuKind) || emptyActionSet : emptyActionSet;
-};
+const getMenuActionSet = (resource?: ContextMenuResource): ContextMenuActionSet => (
+ resource ? menuActionSets.get(resource.menuKind) || emptyActionSet : emptyActionSet
+);
export enum ContextMenuKind {
API_CLIENT_AUTHORIZATION = "ApiClientAuthorization",
TRASH = "Trash",
COLLECTION_FILES = "CollectionFiles",
READONLY_COLLECTION_FILES = "ReadOnlyCollectionFiles",
- COLLECTION_FILES_ITEM = "CollectionFilesItem",
- READONLY_COLLECTION_FILES_ITEM = "ReadOnlyCollectionFilesItem",
+ COLLECTION_FILE_ITEM = "CollectionFileItem",
+ COLLECTION_DIRECTORY_ITEM = "CollectionDirectoryItem",
+ READONLY_COLLECTION_FILE_ITEM = "ReadOnlyCollectionFileItem",
+ READONLY_COLLECTION_DIRECTORY_ITEM = "ReadOnlyCollectionDirectoryItem",
COLLECTION_FILES_NOT_SELECTED = "CollectionFilesNotSelected",
COLLECTION = 'Collection',
COLLECTION_ADMIN = 'CollectionAdmin',
VIRTUAL_MACHINE = "VirtualMachine",
KEEP_SERVICE = "KeepService",
USER = "User",
- NODE = "Node",
GROUPS = "Group",
GROUP_MEMBER = "GroupMember",
+ PERMISSION_EDIT = "PermissionEdit",
LINK = "Link",
+ WORKFLOW = "Workflow",
}