// Copyright (C) The Arvados Authors. All rights reserved.
//
// SPDX-License-Identifier: AGPL-3.0
-import * as React from "react";
+import React from "react";
import { Popover, List, ListItem, ListItemIcon, ListItemText, Divider } from "@material-ui/core";
import { DefaultTransformOrigin } from "../popover/helpers";
import { IconType } from "../icon/icon";
+import { RootState } from "store/store";
+import { ContextMenuResource } from "store/context-menu/context-menu-actions";
export interface ContextMenuItem {
name?: string | React.ComponentType;
icon?: IconType;
component?: React.ComponentType<any>;
+ adminOnly?: boolean;
+ filters?: ((state: RootState, resource: ContextMenuResource) => boolean)[]
}
export type ContextMenuItemGroup = ContextMenuItem[];
transformOrigin={DefaultTransformOrigin}
anchorOrigin={DefaultTransformOrigin}
onContextMenu={this.handleContextMenu}>
- <List dense>
+ <List data-cy='context-menu' dense>
{items.map((group, groupIndex) =>
<React.Fragment key={groupIndex}>
{group.map((item, actionIndex) =>
- <ListItem
- button
- key={actionIndex}
- onClick={() => onItemClick(item)}>
- {item.icon &&
- <ListItemIcon>
- <item.icon />
- </ListItemIcon>}
- {item.name &&
- <ListItemText>
- {item.name}
- </ListItemText>}
- {item.component &&
- <item.component />}
- </ListItem>)}
- {groupIndex < items.length - 1 && <Divider />}
+ item.component
+ ? <item.component
+ key={actionIndex}
+ onClick={() => onItemClick(item)} />
+ : <ListItem
+ button
+ key={actionIndex}
+ onClick={() => onItemClick(item)}>
+ {item.icon &&
+ <ListItemIcon>
+ <item.icon />
+ </ListItemIcon>}
+ {item.name &&
+ <ListItemText>
+ {item.name}
+ </ListItemText>}
+ </ListItem>)}
+ {
+ items[groupIndex + 1] &&
+ items[groupIndex + 1].length > 0 &&
+ <Divider />
+ }
</React.Fragment>)}
</List>
</Popover>;