All files / src/components/PopoverMenu index.tsx

0% Statements 0/11
0% Branches 0/5
0% Functions 0/4
0% Lines 0/11

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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77                                                                                                                                                         
import React, { useState } from 'react';
 
import { IconButton, useTheme } from '@mui/material';
 
import Icon from '../Icon/Icon';
import { DropdownItem } from '../types';
import Popover, { Section } from './Popover';
 
export type PopoverMenuProps = {
  anchor: React.ReactNode;
  container?: HTMLElement | null;
  menuSections: Section[];
  onClick?: (selected: DropdownItem) => void;
  showChevron?: boolean;
  selectedValue?: any;
};
 
export default function PopoverMenu({
  anchor,
  container,
  menuSections,
  onClick,
  showChevron = true,
  selectedValue,
}: PopoverMenuProps): JSX.Element {
  const theme = useTheme();
  const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
 
  const handleClick = (event: React.MouseEvent<HTMLElement>) => {
    setAnchorEl(event.currentTarget);
  };
  const handleClose = () => {
    setAnchorEl(null);
  };
 
  const onItemClick = (selectedItem: DropdownItem) => {
    if (onClick) {
      onClick(selectedItem);
    }
    handleClose();
  };
 
  return (
    <div>
      <IconButton
        onClick={handleClick}
        size='small'
        sx={{
          height: '48px',
          borderRadius: '16px',
          padding: theme.spacing(1.5, 2),
        }}
      >
        {anchor}
        {showChevron && (
          <Icon
            name='chevronDown'
            size='medium'
            style={{
              marginLeft: '8px',
              fill: theme.palette.TwClrIcn,
            }}
          />
        )}
      </IconButton>
      <Popover
        sections={menuSections}
        handleClick={onItemClick}
        anchorElement={anchorEl}
        setAnchorElement={setAnchorEl}
        selectedValue={selectedValue}
        container={container}
      />
    </div>
  );
}