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