| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | 
							- import {
 
-   memo,
 
- } from 'react'
 
- import produce from 'immer'
 
- import {
 
-   useReactFlow,
 
-   useStoreApi,
 
-   useViewport,
 
- } from 'reactflow'
 
- import { useEventListener } from 'ahooks'
 
- import {
 
-   useStore,
 
-   useWorkflowStore,
 
- } from './store'
 
- import { WorkflowHistoryEvent, useNodesInteractions, useWorkflowHistory } from './hooks'
 
- import { CUSTOM_NODE } from './constants'
 
- import { getIterationStartNode } from './utils'
 
- import CustomNode from './nodes'
 
- import CustomNoteNode from './note-node'
 
- import { CUSTOM_NOTE_NODE } from './note-node/constants'
 
- import { BlockEnum } from './types'
 
- const CandidateNode = () => {
 
-   const store = useStoreApi()
 
-   const reactflow = useReactFlow()
 
-   const workflowStore = useWorkflowStore()
 
-   const candidateNode = useStore(s => s.candidateNode)
 
-   const mousePosition = useStore(s => s.mousePosition)
 
-   const { zoom } = useViewport()
 
-   const { handleNodeSelect } = useNodesInteractions()
 
-   const { saveStateToHistory } = useWorkflowHistory()
 
-   useEventListener('click', (e) => {
 
-     const { candidateNode, mousePosition } = workflowStore.getState()
 
-     if (candidateNode) {
 
-       e.preventDefault()
 
-       const {
 
-         getNodes,
 
-         setNodes,
 
-       } = store.getState()
 
-       const { screenToFlowPosition } = reactflow
 
-       const nodes = getNodes()
 
-       const { x, y } = screenToFlowPosition({ x: mousePosition.pageX, y: mousePosition.pageY })
 
-       const newNodes = produce(nodes, (draft) => {
 
-         draft.push({
 
-           ...candidateNode,
 
-           data: {
 
-             ...candidateNode.data,
 
-             _isCandidate: false,
 
-           },
 
-           position: {
 
-             x,
 
-             y,
 
-           },
 
-         })
 
-         if (candidateNode.data.type === BlockEnum.Iteration)
 
-           draft.push(getIterationStartNode(candidateNode.id))
 
-       })
 
-       setNodes(newNodes)
 
-       if (candidateNode.type === CUSTOM_NOTE_NODE)
 
-         saveStateToHistory(WorkflowHistoryEvent.NoteAdd)
 
-       else
 
-         saveStateToHistory(WorkflowHistoryEvent.NodeAdd)
 
-       workflowStore.setState({ candidateNode: undefined })
 
-       if (candidateNode.type === CUSTOM_NOTE_NODE)
 
-         handleNodeSelect(candidateNode.id)
 
-     }
 
-   })
 
-   useEventListener('contextmenu', (e) => {
 
-     const { candidateNode } = workflowStore.getState()
 
-     if (candidateNode) {
 
-       e.preventDefault()
 
-       workflowStore.setState({ candidateNode: undefined })
 
-     }
 
-   })
 
-   if (!candidateNode)
 
-     return null
 
-   return (
 
-     <div
 
-       className='absolute z-10'
 
-       style={{
 
-         left: mousePosition.elementX,
 
-         top: mousePosition.elementY,
 
-         transform: `scale(${zoom})`,
 
-         transformOrigin: '0 0',
 
-       }}
 
-     >
 
-       {
 
-         candidateNode.type === CUSTOM_NODE && (
 
-           <CustomNode {...candidateNode as any} />
 
-         )
 
-       }
 
-       {
 
-         candidateNode.type === CUSTOM_NOTE_NODE && (
 
-           <CustomNoteNode {...candidateNode as any} />
 
-         )
 
-       }
 
-     </div>
 
-   )
 
- }
 
- export default memo(CandidateNode)
 
 
  |