type DataProps = Pick<ContextMenuProps, "anchorEl" | "items" | "open"> & { resource?: ContextMenuResource };
const mapStateToProps = (state: RootState): DataProps => {
const { open, position, resource } = state.contextMenu;
- const isAdmin = state.auth.user!.isAdmin;
+
+ 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, isAdmin),
+ items: filteredItems,
open,
resource
};
};
const emptyActionSet: ContextMenuActionSet = [];
-const getMenuActionSet = (resource?: ContextMenuResource, isAdmin?: boolean): ContextMenuActionSet => {
- if (resource) {
- return menuActionSets
- .get(resource.menuKind)!
- .map((group) => (group.filter((item) => (item.adminOnly ? isAdmin : true))))
- || emptyActionSet
- } else {
- return emptyActionSet;
- }
-};
+const getMenuActionSet = (resource?: ContextMenuResource): ContextMenuActionSet => (
+ resource ? menuActionSets.get(resource.menuKind) || emptyActionSet : emptyActionSet
+);
export enum ContextMenuKind {
API_CLIENT_AUTHORIZATION = "ApiClientAuthorization",
GROUP_MEMBER = "GroupMember",
PERMISSION_EDIT = "PermissionEdit",
LINK = "Link",
+ WORKFLOW = "Workflow",
}