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<T> {
11 onClick: (item: T) => void;
14 export type ContextMenuActionGroup<T> = Array<ContextMenuAction<T>>;
16 export interface ContextMenuProps<T> {
17 anchorEl?: HTMLElement;
20 actions: Array<ContextMenuActionGroup<T>>;
23 export default class ContextMenu<T> extends React.PureComponent<ContextMenuProps<T>> {
25 const { anchorEl, onClose, actions, item } = this.props;
28 open={Boolean(anchorEl)}
30 transformOrigin={DefaultTransformOrigin}
31 anchorOrigin={DefaultTransformOrigin}>
33 {actions.map((group, groupIndex) =>
34 <React.Fragment key={groupIndex}>
35 {group.map((action, actionIndex) =>
39 onClick={() => item && action.onClick(item)}>
41 <i className={action.icon} />
47 {groupIndex < actions.length - 1 && <Divider />}