import classNames from "classnames"; import * as React from "react"; import { createPortal } from "react-dom"; import { usePopper } from "react-popper"; import { useClickOutside } from "@/utilities/hooks"; import Menu, { MenuItems } from "./Menu"; import "./PopupMenu.css"; export interface PopupMenuProps { items: MenuItems; children?: React.ReactNode; containerClassName?: string; containerStyle?: React.CSSProperties; } const PopupMenu: React.FC = ({ items, children, containerClassName, containerStyle, }) => { const [show, setShow] = React.useState(false); const [referenceElement, setReferenceElement] = React.useState(null); const [popperElement, setPopperElement] = React.useState(null); const { styles, attributes } = usePopper(referenceElement, popperElement); useClickOutside(popperElement, () => setShow(false), true); return ( <>
setShow(true)} > {children}
{show ? createPortal(
{ setShow(false); }} />
, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion document.getElementById("portal")! ) : null} ); }; export default PopupMenu;