import React from "react";
import { render, unmountComponentAtNode } from "react-dom";
import clsx from "clsx";
import { Popover } from "./Popover";
import "./ContextMenu.scss";
import {
getShortcutFromShortcutName,
ShortcutName,
} from "../actions/shortcuts";
type ContextMenuOption = {
shortcutName: ShortcutName;
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 (
event.preventDefault()}
>
{options.map(({ action, shortcutName, label }, idx) => (
-
))}
);
};
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(),
);
}
},
};