1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
4 import * as React from "react";
5 import { Popover, List, ListItem, ListItemIcon, ListItemText, Divider } from "@material-ui/core";
6 import { DefaultTransformOrigin } from "../popover/helpers";
8 export interface ContextMenuAction {
11 openCreateDialog?: boolean;
14 export type ContextMenuActionGroup = ContextMenuAction[];
16 export interface ContextMenuProps<T> {
17 anchorEl?: HTMLElement;
18 actions: ContextMenuActionGroup[];
19 onActionClick: (action: ContextMenuAction) => void;
23 export default class ContextMenu<T> extends React.PureComponent<ContextMenuProps<T>> {
25 const { anchorEl, actions, onClose, onActionClick } = this.props;
30 transformOrigin={DefaultTransformOrigin}
31 anchorOrigin={DefaultTransformOrigin}
32 onContextMenu={this.handleContextMenu}>
34 {actions.map((group, groupIndex) =>
35 <React.Fragment key={groupIndex}>
36 {group.map((action, actionIndex) =>
40 onClick={() => onActionClick(action)}>
42 <i className={action.icon} />
48 {groupIndex < actions.length - 1 && <Divider />}
54 handleContextMenu = (event: React.MouseEvent<HTMLElement>) => {
55 event.preventDefault();