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>
);
}
);
|