import React from "react"; import { render, unmountComponentAtNode } from "react-dom"; import clsx from "clsx"; import { Popover } from "./Popover"; import "./ContextMenu.scss"; type ContextMenuOption = { label: string; action(): void; }; type Props = { options: ContextMenuOption[]; onCloseRequest?(): void; top: number; left: number; }; const ContextMenu = ({ options, onCloseRequest, top, left }: Props) => { const isDarkTheme = !!document .querySelector(".excalidraw") ?.classList.contains("Appearance_dark"); return (
); }; const ContextMenuOption = ({ label, action }: ContextMenuOption) => ( ); let contextMenuNode: HTMLDivElement; const getContextMenuNode = (): HTMLDivElement => { if (contextMenuNode) { return contextMenuNode; } const div = document.createElement("div"); document.body.appendChild(div); return (contextMenuNode = div); }; type ContextMenuParams = { options: (ContextMenuOption | false | null | undefined)[]; top: number; left: number; }; const handleClose = () => { unmountComponentAtNode(getContextMenuNode()); }; export default { push(params: ContextMenuParams) { const options = Array.of(); params.options.forEach((option) => { if (option) { options.push(option); } }); if (options.length) { render( , getContextMenuNode(), ); } }, };