import React, { useRef } from 'react' import { Box, Menu, MenuItem, MenuList, MenuGroup, MenuItemOption, MenuOptionGroup, Heading, MenuDivider, Modal, ModalOverlay, ModalContent, ModalHeader, ModalFooter, ModalBody, ModalCloseButton, useDisclosure, Button, PopoverTrigger, PopoverContent, Popover, Flex, PopoverBody, PopoverCloseButton, PopoverArrow, PopoverHeader, PopoverFooter, Portal, Text, VStack, } from '@chakra-ui/react' import { DeleteIcon, EditIcon, CopyIcon, AddIcon, ViewIcon, ExternalLinkIcon, ChevronRightIcon, PlusSquareIcon, } from '@chakra-ui/icons' import { OrgRoamGraphReponse, OrgRoamLink, OrgRoamNode } from '../api' export default interface ContextMenuProps { background: Boolean node?: OrgRoamNode nodeType?: string coordinates: number[] handleLocal: (node: OrgRoamNode, add: string) => void openNodeInEmacs: (node: OrgRoamNode) => void menuClose: () => void scope: { nodeIds: string[] } deleteNodeInEmacs: (node: OrgRoamNode) => void createNodeInEmacs: (node: OrgRoamNode) => void } export const ContextMenu = (props: ContextMenuProps) => { const { background, node, nodeType, coordinates, handleLocal, menuClose, scope, openNodeInEmacs, deleteNodeInEmacs, createNodeInEmacs, } = props const { isOpen, onOpen, onClose } = useDisclosure() const copyRef = useRef() return ( <> menuClose()}> {node && ( <> {node.title} )} {scope.nodeIds.length !== 0 && ( <> handleLocal(node!, 'add')} icon={}> Expand local graph at node handleLocal(node!, 'replace')} icon={}> Open local graph for this node )} {!node?.properties.FILELESS ? ( } onClick={() => openNodeInEmacs(node as OrgRoamNode)}> Open in Emacs ) : ( } onClick={() => createNodeInEmacs(node)}> Create node )} {node?.properties.ROAM_REFS && ( }>Open in Zotero )} {scope.nodeIds.length === 0 && ( } onClick={() => handleLocal(node!, 'replace')}> Open local graph )} {/* Doesn't work at the moment }> Copy... ID Title File path */} {node?.level === 0 && ( } color="red.500" onClick={onOpen} > Permenantly delete note )} Delete node? This will permanently delete your note: {node?.title} {node?.level !== 0 && ( This will only delete the from this heading until but not including the next node. Your parent file and all other nodes will not be deleted. )} Are you sure you want to do continue? ) } /* * * * Permenantly delete node * * * * Delete Node? * * * * This will permanently delete your node! Are you sure you want to do this? * * * * * * * * * * */