| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | 
							- import type { MouseEvent } from 'react'
 - import {
 -   useCallback,
 - } from 'react'
 - import produce from 'immer'
 - import type {
 -   OnSelectionChangeFunc,
 - } from 'reactflow'
 - import { useStoreApi } from 'reactflow'
 - import { useWorkflowStore } from '../store'
 - import type { Node } from '../types'
 - 
 - export const useSelectionInteractions = () => {
 -   const store = useStoreApi()
 -   const workflowStore = useWorkflowStore()
 - 
 -   const handleSelectionStart = useCallback(() => {
 -     const {
 -       getNodes,
 -       setNodes,
 -       edges,
 -       setEdges,
 -       userSelectionRect,
 -     } = store.getState()
 - 
 -     if (!userSelectionRect?.width || !userSelectionRect?.height) {
 -       const nodes = getNodes()
 -       const newNodes = produce(nodes, (draft) => {
 -         draft.forEach((node) => {
 -           if (node.data._isBundled)
 -             node.data._isBundled = false
 -         })
 -       })
 -       setNodes(newNodes)
 -       const newEdges = produce(edges, (draft) => {
 -         draft.forEach((edge) => {
 -           if (edge.data._isBundled)
 -             edge.data._isBundled = false
 -         })
 -       })
 -       setEdges(newEdges)
 -     }
 -   }, [store])
 - 
 -   const handleSelectionChange = useCallback<OnSelectionChangeFunc>(({ nodes: nodesInSelection, edges: edgesInSelection }) => {
 -     const {
 -       getNodes,
 -       setNodes,
 -       edges,
 -       setEdges,
 -       userSelectionRect,
 -     } = store.getState()
 - 
 -     const nodes = getNodes()
 - 
 -     if (!userSelectionRect?.width || !userSelectionRect?.height)
 -       return
 - 
 -     const newNodes = produce(nodes, (draft) => {
 -       draft.forEach((node) => {
 -         const nodeInSelection = nodesInSelection.find(n => n.id === node.id)
 - 
 -         if (nodeInSelection)
 -           node.data._isBundled = true
 -         else
 -           node.data._isBundled = false
 -       })
 -     })
 -     setNodes(newNodes)
 -     const newEdges = produce(edges, (draft) => {
 -       draft.forEach((edge) => {
 -         const edgeInSelection = edgesInSelection.find(e => e.id === edge.id)
 - 
 -         if (edgeInSelection)
 -           edge.data._isBundled = true
 -         else
 -           edge.data._isBundled = false
 -       })
 -     })
 -     setEdges(newEdges)
 -   }, [store])
 - 
 -   const handleSelectionDrag = useCallback((_: MouseEvent, nodesWithDrag: Node[]) => {
 -     const {
 -       getNodes,
 -       setNodes,
 -     } = store.getState()
 - 
 -     workflowStore.setState({
 -       nodeAnimation: false,
 -     })
 -     const nodes = getNodes()
 -     const newNodes = produce(nodes, (draft) => {
 -       draft.forEach((node) => {
 -         const dragNode = nodesWithDrag.find(n => n.id === node.id)
 - 
 -         if (dragNode)
 -           node.position = dragNode.position
 -       })
 -     })
 -     setNodes(newNodes)
 -   }, [store, workflowStore])
 - 
 -   return {
 -     handleSelectionStart,
 -     handleSelectionChange,
 -     handleSelectionDrag,
 -   }
 - }
 
 
  |