| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | 
							- import {
 -   memo,
 -   useCallback,
 -   useState,
 - } from 'react'
 - import cn from 'classnames'
 - import { intersection } from 'lodash-es'
 - import type { EdgeProps } from 'reactflow'
 - import {
 -   BaseEdge,
 -   EdgeLabelRenderer,
 -   Position,
 -   getBezierPath,
 - } from 'reactflow'
 - import {
 -   useAvailableBlocks,
 -   useNodesInteractions,
 - } from './hooks'
 - import BlockSelector from './block-selector'
 - import type {
 -   Edge,
 -   OnSelectBlock,
 - } from './types'
 - import { ITERATION_CHILDREN_Z_INDEX } from './constants'
 - 
 - const CustomEdge = ({
 -   id,
 -   data,
 -   source,
 -   sourceHandleId,
 -   target,
 -   targetHandleId,
 -   sourceX,
 -   sourceY,
 -   targetX,
 -   targetY,
 -   selected,
 - }: EdgeProps) => {
 -   const [
 -     edgePath,
 -     labelX,
 -     labelY,
 -   ] = getBezierPath({
 -     sourceX: sourceX - 8,
 -     sourceY,
 -     sourcePosition: Position.Right,
 -     targetX: targetX + 8,
 -     targetY,
 -     targetPosition: Position.Left,
 -     curvature: 0.16,
 -   })
 -   const [open, setOpen] = useState(false)
 -   const { handleNodeAdd } = useNodesInteractions()
 -   const { availablePrevBlocks } = useAvailableBlocks((data as Edge['data'])!.targetType, (data as Edge['data'])?.isInIteration)
 -   const { availableNextBlocks } = useAvailableBlocks((data as Edge['data'])!.sourceType, (data as Edge['data'])?.isInIteration)
 - 
 -   const handleOpenChange = useCallback((v: boolean) => {
 -     setOpen(v)
 -   }, [])
 - 
 -   const handleInsert = useCallback<OnSelectBlock>((nodeType, toolDefaultValue) => {
 -     handleNodeAdd(
 -       {
 -         nodeType,
 -         toolDefaultValue,
 -       },
 -       {
 -         prevNodeId: source,
 -         prevNodeSourceHandle: sourceHandleId || 'source',
 -         nextNodeId: target,
 -         nextNodeTargetHandle: targetHandleId || 'target',
 -       },
 -     )
 -   }, [handleNodeAdd, source, sourceHandleId, target, targetHandleId])
 - 
 -   return (
 -     <>
 -       <BaseEdge
 -         id={id}
 -         path={edgePath}
 -         style={{
 -           stroke: (selected || data?._connectedNodeIsHovering || data?._runned) ? '#2970FF' : '#D0D5DD',
 -           strokeWidth: 2,
 -         }}
 -       />
 -       <EdgeLabelRenderer>
 -         <div
 -           className={cn(
 -             'nopan nodrag hover:scale-125',
 -             data?._hovering ? 'block' : 'hidden',
 -             open && '!block',
 -             data.isInIteration && `z-[${ITERATION_CHILDREN_Z_INDEX}]`,
 -           )}
 -           style={{
 -             position: 'absolute',
 -             transform: `translate(-50%, -50%) translate(${labelX}px, ${labelY}px)`,
 -             pointerEvents: 'all',
 -           }}
 -         >
 -           <BlockSelector
 -             open={open}
 -             onOpenChange={handleOpenChange}
 -             asChild
 -             onSelect={handleInsert}
 -             availableBlocksTypes={intersection(availablePrevBlocks, availableNextBlocks)}
 -             triggerClassName={() => 'hover:scale-150 transition-all'}
 -           />
 -         </div>
 -       </EdgeLabelRenderer>
 -     </>
 -   )
 - }
 - 
 - export default memo(CustomEdge)
 
 
  |