123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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)
|