// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 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; adminOnly?: boolean; filters?: ((state: RootState, resource: ContextMenuResource) => boolean)[] } export type ContextMenuItemGroup = ContextMenuItem[]; export interface ContextMenuProps { anchorEl?: HTMLElement; items: ContextMenuItemGroup[]; open: boolean; onItemClick: (action: ContextMenuItem) => void; onClose: () => void; } export class ContextMenu extends React.PureComponent { render() { const { anchorEl, items, open, onClose, onItemClick } = this.props; return {items.map((group, groupIndex) => {group.map((item, actionIndex) => item.component ? onItemClick(item)} /> : onItemClick(item)}> {item.icon && } {item.name && {item.name} } )} { items[groupIndex + 1] && items[groupIndex + 1].length > 0 && } )} ; } handleContextMenu = (event: React.MouseEvent) => { event.preventDefault(); this.props.onClose(); } }