X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/e5b901f7d6f87b56f43d3dbe002c9c90a3d41349..28ded6ac60c1317b5872a22ce827b073f26fa030:/src/components/context-menu/context-menu.tsx diff --git a/src/components/context-menu/context-menu.tsx b/src/components/context-menu/context-menu.tsx index c86c5177..2103a2a0 100644 --- a/src/components/context-menu/context-menu.tsx +++ b/src/components/context-menu/context-menu.tsx @@ -4,49 +4,55 @@ import * as React from "react"; import { Popover, List, ListItem, ListItemIcon, ListItemText, Divider } from "@material-ui/core"; import { DefaultTransformOrigin } from "../popover/helpers"; +import { IconType } from "../icon/icon"; -export interface ContextMenuAction { +export interface ContextMenuItem { name: string; - icon: string; - onClick: (item: T) => void; + icon: IconType; } -export type ContextMenuActionGroup = Array>; +export type ContextMenuItemGroup = ContextMenuItem[]; -export interface ContextMenuProps { +export interface ContextMenuProps { anchorEl?: HTMLElement; - item?: T; + items: ContextMenuItemGroup[]; + onItemClick: (action: ContextMenuItem) => void; onClose: () => void; - actions: Array>; } -export default class ContextMenu extends React.PureComponent> { +export class ContextMenu extends React.PureComponent { render() { - const { anchorEl, onClose, actions, item } = this.props; + const { anchorEl, items, onClose, onItemClick} = this.props; return + anchorOrigin={DefaultTransformOrigin} + onContextMenu={this.handleContextMenu}> - {actions.map((group, groupIndex) => + {items.map((group, groupIndex) => - {group.map((action, actionIndex) => + {group.map((item, actionIndex) => item && action.onClick(item)}> + onClick={() => onItemClick(item)}> - + - {action.name} + {item.name} )} - {groupIndex < actions.length - 1 && } + {groupIndex < items.length - 1 && } )} ; } + + handleContextMenu = (event: React.MouseEvent) => { + event.preventDefault(); + this.props.onClose(); + } }