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";
type DataProps = Pick<ContextMenuProps, "anchorEl" | "items" | "open"> & { resource?: ContextMenuResource };
const mapStateToProps = (state: RootState): DataProps => {
const { open, position, resource } = state.contextMenu;
}
});
+const handleItemClick = memoize(
+ (resource: DataProps['resource'], onItemClick: ActionProps['onItemClick']): ContextMenuProps['onItemClick'] =>
+ item => {
+ onItemClick(item, resource);
+ }
+);
+
const mergeProps = ({ resource, ...dataProps }: DataProps, actionProps: ActionProps): ContextMenuProps => ({
...dataProps,
...actionProps,
- onItemClick: item => {
- actionProps.onItemClick(item, resource);
- }
+ onItemClick: handleItemClick(resource, actionProps.onItemClick)
});
+
export const ContextMenu = connect(mapStateToProps, mapDispatchToProps, mergeProps)(ContextMenuComponent);
const menuActionSets = new Map<string, ContextMenuActionSet>();
export const addMenuActionSet = (name: string, itemSet: ContextMenuActionSet) => {
- menuActionSets.set(name, itemSet);
+ const sorted = itemSet.map(items => items.sort(sortByProperty('name')));
+ menuActionSets.set(name, sorted);
};
+const emptyActionSet: ContextMenuActionSet = [];
const getMenuActionSet = (resource?: ContextMenuResource): ContextMenuActionSet => {
- return resource ? menuActionSets.get(resource.menuKind) || [] : [];
+ return resource ? menuActionSets.get(resource.menuKind) || emptyActionSet : emptyActionSet;
};
export enum ContextMenuKind {
API_CLIENT_AUTHORIZATION = "ApiClientAuthorization",
ROOT_PROJECT = "RootProject",
PROJECT = "Project",
+ READONLY_PROJECT = 'ReadOnlyProject',
+ PROJECT_ADMIN = "ProjectAdmin",
RESOURCE = "Resource",
FAVORITE = "Favorite",
TRASH = "Trash",
COLLECTION_FILES = "CollectionFiles",
+ READONLY_COLLECTION_FILES = "ReadOnlyCollectionFiles",
COLLECTION_FILES_ITEM = "CollectionFilesItem",
+ READONLY_COLLECTION_FILES_ITEM = "ReadOnlyCollectionFilesItem",
COLLECTION_FILES_NOT_SELECTED = "CollectionFilesNotSelected",
COLLECTION = 'Collection',
- COLLECTION_RESOURCE = 'CollectionResource',
+ COLLECTION_ADMIN = 'CollectionAdmin',
+ READONLY_COLLECTION = 'ReadOnlyCollection',
TRASHED_COLLECTION = 'TrashedCollection',
PROCESS = "Process",
+ PROCESS_ADMIN = 'ProcessAdmin',
PROCESS_RESOURCE = 'ProcessResource',
PROCESS_LOGS = "ProcessLogs",
REPOSITORY = "Repository",
VIRTUAL_MACHINE = "VirtualMachine",
KEEP_SERVICE = "KeepService",
USER = "User",
- NODE = "Node"
+ NODE = "Node",
+ GROUPS = "Group",
+ GROUP_MEMBER = "GroupMember",
+ LINK = "Link",
}