import { ClickAwayListener, Grow, IconButton, MenuItem, MenuList, Paper, Popper } from "@material-ui/core"; import MoreVertIcon from "@material-ui/icons/MoreVert"; import { makeStyles } from "@saleor/theme"; import React from "react"; const ITEM_HEIGHT = 48; export interface CardMenuItem { disabled?: boolean; label: string; testId?: string; onSelect: () => void; } export interface CardMenuProps { className?: string; disabled?: boolean; menuItems: CardMenuItem[]; } const useStyles = makeStyles( theme => ({ container: { zIndex: 1 }, iconButton: { background: theme.palette.background.paper, borderRadius: "100%", height: 32, padding: 0, width: 32 }, paper: { marginTop: theme.spacing(2), maxHeight: ITEM_HEIGHT * 4.5 } }), { name: "CardMenu" } ); const CardMenu: React.FC = props => { const { className, disabled, menuItems, ...rest } = props; const classes = useStyles(props); const anchorRef = React.useRef(null); const [open, setOpen] = React.useState(false); const handleToggle = () => setOpen(prevOpen => !prevOpen); const handleClose = (event: React.MouseEvent) => { if ( anchorRef.current && anchorRef.current.contains(event.target as HTMLElement) ) { return; } setOpen(false); }; const handleListKeyDown = (event: React.KeyboardEvent) => { if (event.key === "Tab") { event.preventDefault(); setOpen(false); } }; const prevOpen = React.useRef(open); React.useEffect(() => { if (prevOpen.current === true && open === false) { anchorRef.current!.focus(); } prevOpen.current = open; }, [open]); const handleMenuClick = (index: number) => { menuItems[index].onSelect(); setOpen(false); }; return (
{({ TransitionProps, placement }) => ( {menuItems.map((menuItem, menuItemIndex) => ( handleMenuClick(menuItemIndex)} key={menuItem.label} data-test={menuItem.testId} > {menuItem.label} ))} )}
); }; CardMenu.displayName = "CardMenu"; export default CardMenu;