All files / app/components Menu.tsx

100% Statements 14/14
100% Branches 0/0
100% Functions 3/3
100% Lines 12/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56          5x 5x 5x 5x   27x                             5x 191x 191x                   5x   1085x 1085x                           5x  
import {
  Menu as MuiMenu,
  MenuItem as MuiMenuItem,
  MenuItemProps as MuiMenuItemProps,
  MenuProps,
} from "@material-ui/core";
import classNames from "classnames";
import React from "react";
import makeStyles from "utils/makeStyles";
 
const useStyles = makeStyles((theme) => ({
  item: {
    paddingInline: theme.spacing(2),
  },
  itemMessage: {
    display: "flex",
    flexDirection: "row",
    justifyContent: "space-between",
    alignItems: "center",
  },
  itemDivider: {
    borderBottom: `1px solid ${theme.palette.divider}`,
  },
}));
 
export default function Menu(props: Omit<MenuProps, "className">) {
  const classes = useStyles();
  return <MuiMenu {...props} />;
}
 
//forwarding ref is necessary because Menu
//injects refs into MenuItems
interface MenuItemProps extends Omit<MuiMenuItemProps, "className"> {
  hasNotification?: boolean;
  hasBottomDivider?: boolean;
}
 
export const MenuItem = React.forwardRef(
  (props: MenuItemProps, ref: React.ForwardedRef<HTMLLIElement>) => {
    const classes = useStyles();
    return (
      <MuiMenuItem
        {...props}
        className={classNames(classes.item, {
          [classes.itemMessage]: props.hasNotification,
          [classes.itemDivider]: props.hasBottomDivider,
        })}
        button={true}
        ref={ref}
      />
    );
  }
);
 
MenuItem.displayName = "MenuItem";