All files / src/components/NavPopover NavPopoverContent.tsx

0% Statements 0/8
0% Branches 0/10
0% Functions 0/4
0% Lines 0/8

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 78 79 80                                                                                                                                                               
import {
  forwardRef,
  MenuDivider,
  MenuGroup,
  MenuItem,
  MenuList,
  MenuListProps,
} from "@chakra-ui/react";
import { Fragment, FunctionComponent } from "react";
import type { IMenuItems, ILink } from "./types";
import { eventName } from "../../contexts/Analytics/util";
import { ExternalLink } from "../ExternalLink";
import { NavLink } from "../NavLink";
 
export interface NavPopoverContentProps extends MenuListProps {
  "data-event"?: string;
  items: IMenuItems;
}
 
const Link: FunctionComponent<ILink> = ({ display, isNavLink, url }) =>
  isNavLink ? (
    <NavLink color="link" to={url} w="100%">
      {display}
    </NavLink>
  ) : (
    <ExternalLink
      alignItems="center"
      display="flex"
      hasWarning={false}
      href={url}
      justifyContent="space-between"
      w="100%"
    >
      {display}
    </ExternalLink>
  );
 
export const NavPopoverContent = forwardRef<NavPopoverContentProps, "div">(
  ({ "data-event": dataEvent, items, ...menuProps }, ref) => {
    return (
      <MenuList {...menuProps} ref={ref}>
        {items.map((item, idx) => {
          if ("links" in item) {
            return (
              <Fragment key={`${item.display}-${idx}`}>
                <MenuGroup textAlign="left" title={item.display}>
                  {item.links.map((link, linkIdx) => (
                    <MenuItem
                      data-event={
                        dataEvent
                          ? eventName(dataEvent, link.display)
                          : undefined
                      }
                      key={`${link.display}-${linkIdx}`}
                    >
                      <Link {...link} />
                    </MenuItem>
                  ))}
                </MenuGroup>
                {idx !== items.length - 1 && <MenuDivider />}
              </Fragment>
            );
          }
 
          return (
            <MenuItem
              data-event={
                dataEvent ? eventName(dataEvent, item.display) : undefined
              }
              key={`${item.display}-${idx}`}
            >
              <Link {...item} />
            </MenuItem>
          );
        })}
      </MenuList>
    );
  }
);