import { ActionIcon, Group, Menu } from "@mantine/core"; import { Block, BlockNoteEditor, BlockSchema } from "bocknoat-core"; import { FC, useEffect, useRef, useState } from "react"; import { AiOutlinePlus } from "react-icons/ai"; import { MdDragIndicator } from "react-icons/md"; import { DefaultDragHandleMenu } from "./DefaultDragHandleMenu"; import { DragHandleMenuProps } from "./DragHandleMenu"; export type BlockSideMenuProps = { editor: BlockNoteEditor; block: Block; dragHandleMenu?: FC>; addBlock: () => void; blockDragStart: (event: DragEvent) => void; blockDragEnd: () => void; freezeMenu: () => void; unfreezeMenu: () => void; }; export const BlockSideMenu = ( props: BlockSideMenuProps ) => { const [dragHandleMenuOpened, setDragHandleMenuOpened] = useState(false); const dragHandleRef = useRef(null); useEffect(() => { const dragHandle = dragHandleRef.current; if (dragHandle instanceof HTMLDivElement) { dragHandle.addEventListener("dragstart", props.blockDragStart); dragHandle.addEventListener("dragend", props.blockDragEnd); return () => { dragHandle.removeEventListener("dragstart", props.blockDragStart); dragHandle.removeEventListener("dragend", props.blockDragEnd); }; } return; }, [props.blockDragEnd, props.blockDragStart]); const closeMenu = () => { setDragHandleMenuOpened(false); props.unfreezeMenu(); }; const DragHandleMenu = props.dragHandleMenu || DefaultDragHandleMenu; return ( { { props.addBlock(); }} /> }
{ setDragHandleMenuOpened(true); props.freezeMenu(); }} size={24} data-test={"dragHandle"}> {}
); };