Spaces:
Paused
Paused
| import { | |
| memo, | |
| useEffect, | |
| useRef, | |
| } from 'react' | |
| import { useClickAway } from 'ahooks' | |
| import { useNodes } from 'reactflow' | |
| import PanelOperatorPopup from './nodes/_base/components/panel-operator/panel-operator-popup' | |
| import type { Node } from './types' | |
| import { useStore } from './store' | |
| import { usePanelInteractions } from './hooks' | |
| const NodeContextmenu = () => { | |
| const ref = useRef(null) | |
| const nodes = useNodes() | |
| const { handleNodeContextmenuCancel, handlePaneContextmenuCancel } = usePanelInteractions() | |
| const nodeMenu = useStore(s => s.nodeMenu) | |
| const currentNode = nodes.find(node => node.id === nodeMenu?.nodeId) as Node | |
| useEffect(() => { | |
| if (nodeMenu) | |
| handlePaneContextmenuCancel() | |
| }, [nodeMenu, handlePaneContextmenuCancel]) | |
| useClickAway(() => { | |
| handleNodeContextmenuCancel() | |
| }, ref) | |
| if (!nodeMenu || !currentNode) | |
| return null | |
| return ( | |
| <div | |
| className='absolute z-[9]' | |
| style={{ | |
| left: nodeMenu.left, | |
| top: nodeMenu.top, | |
| }} | |
| ref={ref} | |
| > | |
| <PanelOperatorPopup | |
| id={currentNode.id} | |
| data={currentNode.data} | |
| onClosePopup={() => handleNodeContextmenuCancel()} | |
| showHelpLink | |
| /> | |
| </div> | |
| ) | |
| } | |
| export default memo(NodeContextmenu) | |