1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import React, { useState, useMemo } from 'react';
6 import { DoubleRightArrows } from 'components/icon/icon';
7 import classnames from 'classnames';
8 import { IconButton, Menu, MenuItem, StyleRulesCallback, Tooltip, WithStyles, withStyles } from '@material-ui/core';
9 import { ArvadosTheme } from 'common/custom-theme';
11 type CssRules = 'inOverflowMenu' | 'iconButton';
13 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
16 backgroundColor: 'transparent',
24 export const OverflowMenu = withStyles(styles)((props: any & WithStyles<CssRules>) => {
25 const { children, className, visibilityMap, classes } = props;
26 const [anchorEl, setAnchorEl] = useState(null);
27 const open = Boolean(anchorEl);
28 const handleClick = (event) => {
29 setAnchorEl(event.currentTarget);
32 const handleClose = () => {
36 const shouldShowMenu = useMemo(() => Object.values(visibilityMap).some((v) => v === false), [visibilityMap]);
37 if (!shouldShowMenu) {
41 <div className={className}>
42 <Tooltip title="More Options" disableFocusListener>
45 aria-controls='long-menu'
48 className={classes.iconButton}
60 {React.Children.map(children, (child: any) => {
61 if (!visibilityMap[child.props['data-targetid']]) {
67 {React.cloneElement(child, {
68 className: classnames(child.className, classes.inOverflowMenu),