@material-ui/core#MenuList TypeScript Examples
The following examples show how to use
@material-ui/core#MenuList.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: MoreMenu.tsx From anchor-web-app with Apache License 2.0 | 5 votes |
function MoreMenuBase({ children, className }: MoreMenuProps) {
const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
return (
<>
<MoreButton
onClick={(event: MouseEvent<HTMLButtonElement>) =>
setAnchorEl(event.currentTarget)
}
>
More {anchorEl ? <ExpandLess /> : <ExpandMore />}
</MoreButton>
<Popover
open={!!anchorEl}
anchorEl={anchorEl}
onClose={() => setAnchorEl(null)}
anchorOrigin={{
vertical: 'bottom',
horizontal: 'right',
}}
transformOrigin={{
vertical: 'top',
horizontal: 'right',
}}
className={className}
>
<MenuList variant="menu">
{Children.map(children, (child) => {
return cloneElement(child, {
children: (
<IconSpan>
{child.props.children} <ChevronRightRounded />
</IconSpan>
),
});
})}
</MenuList>
</Popover>
</>
);
}
Example #2
Source File: CostInsightsNavigation.tsx From backstage with Apache License 2.0 | 5 votes |
CostInsightsNavigation = React.memo(
({ alerts, products }: CostInsightsNavigationProps) => {
const classes = useStyles();
const { icons } = useConfig();
const [isOpen, setOpen] = useState(false);
const defaultNavigationItems = getDefaultNavigationItems(alerts);
const productNavigationItems: NavigationItem[] =
products?.map(product => ({
title: product.name,
navigation: product.kind,
icon: findAlways(icons, i => i.kind === product.kind).component,
})) ?? [];
useEffect(
function toggleProductMenuItems() {
if (products?.length) {
setOpen(true);
} else {
setOpen(false);
}
},
[products],
);
return (
<MenuList className={classes.menuList}>
{defaultNavigationItems.map(item => (
<NavigationMenuItem
key={`navigation-menu-item-${item.navigation}`}
navigation={item.navigation}
title={item.title}
icon={
item.navigation === DefaultNavigation.AlertInsightsHeader ? (
<Badge badgeContent={alerts} color="secondary">
{React.cloneElement(item.icon, {
className: classes.navigationIcon,
})}
</Badge>
) : (
React.cloneElement(item.icon, {
className: classes.navigationIcon,
})
)
}
/>
))}
<Collapse in={isOpen} timeout={850}>
{productNavigationItems.map((item: NavigationItem) => (
<NavigationMenuItem
key={`navigation-menu-item-${item.navigation}`}
navigation={item.navigation}
icon={React.cloneElement(item.icon, {
className: classes.navigationIcon,
})}
title={item.title}
/>
))}
</Collapse>
</MenuList>
);
},
)
Example #3
Source File: Menu.tsx From glific-frontend with GNU Affero General Public License v3.0 | 5 votes |
Menu: React.SFC<MenuProps> = ({
menus,
children,
eventType = 'Click',
placement = 'top',
}) => {
const [open, setOpen] = useState(false);
const anchorRef = useRef<HTMLDivElement>(null);
const handleOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
};
const menuList = menus.map((menu: any) => (
<div key={menu.title}>
<MenuItem
onClickHandler={() => {
if (menu.onClick) {
menu.onClick();
} else {
handleClose();
}
}}
{...menu}
/>
</div>
));
return (
<div data-testid="Menu">
<div
onClick={eventType === 'Click' ? handleOpen : undefined}
onKeyDown={eventType === 'Click' ? handleOpen : undefined}
onMouseEnter={eventType === 'MouseEnter' ? handleOpen : undefined}
onMouseLeave={eventType === 'MouseEnter' ? handleClose : undefined}
aria-hidden="true"
ref={anchorRef}
aria-controls={open ? 'menu-list-grow' : undefined}
aria-haspopup="true"
>
{children}
</div>
<Popper
open={open}
anchorEl={anchorRef.current}
role={undefined}
transition
disablePortal={placement === 'top'}
placement={placement}
>
{({ TransitionProps }) => (
<Grow {...TransitionProps}>
<Paper>
<ClickAwayListener onClickAway={handleClose}>
<div
onMouseEnter={eventType === 'MouseEnter' ? handleOpen : undefined}
onMouseLeave={eventType === 'MouseEnter' ? handleClose : undefined}
>
<MenuList autoFocusItem={open}>{menuList}</MenuList>
</div>
</ClickAwayListener>
</Paper>
</Grow>
)}
</Popper>
</div>
);
}
Example #4
Source File: EntityContextMenu.tsx From backstage with Apache License 2.0 | 4 votes |
export function EntityContextMenu(props: EntityContextMenuProps) {
const {
UNSTABLE_extraContextMenuItems,
UNSTABLE_contextMenuOptions,
onUnregisterEntity,
onInspectEntity,
} = props;
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement>();
const classes = useStyles();
const unregisterPermission = useEntityPermission(
catalogEntityDeletePermission,
);
const onOpen = (event: React.SyntheticEvent<HTMLButtonElement>) => {
setAnchorEl(event.currentTarget);
};
const onClose = () => {
setAnchorEl(undefined);
};
const extraItems = UNSTABLE_extraContextMenuItems && [
...UNSTABLE_extraContextMenuItems.map(item => (
<MenuItem
key={item.title}
onClick={() => {
onClose();
item.onClick();
}}
>
<ListItemIcon>
<item.Icon fontSize="small" />
</ListItemIcon>
<ListItemText primary={item.title} />
</MenuItem>
)),
<Divider key="the divider is here!" />,
];
const disableUnregister =
(!unregisterPermission.allowed ||
UNSTABLE_contextMenuOptions?.disableUnregister) ??
false;
return (
<>
<IconButton
aria-label="more"
aria-controls="long-menu"
aria-haspopup="true"
aria-expanded={!!anchorEl}
role="button"
onClick={onOpen}
data-testid="menu-button"
className={classes.button}
id="long-menu"
>
<MoreVert />
</IconButton>
<Popover
open={Boolean(anchorEl)}
onClose={onClose}
anchorEl={anchorEl}
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
transformOrigin={{ vertical: 'top', horizontal: 'right' }}
aria-labelledby="long-menu"
>
<MenuList>
{extraItems}
<MenuItem
onClick={() => {
onClose();
onUnregisterEntity();
}}
disabled={disableUnregister}
>
<ListItemIcon>
<CancelIcon fontSize="small" />
</ListItemIcon>
<ListItemText primary="Unregister entity" />
</MenuItem>
<MenuItem
onClick={() => {
onClose();
onInspectEntity();
}}
>
<ListItemIcon>
<BugReportIcon fontSize="small" />
</ListItemIcon>
<ListItemText primary="Inspect entity" />
</MenuItem>
</MenuList>
</Popover>
</>
);
}