| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | import type { FC } from 'react'import {  memo,  useEffect,} from 'react'import {  Background,  useNodesInitialized,  useViewport,} from 'reactflow'import { LoopStartNodeDumb } from '../loop-start'import { useNodeLoopInteractions } from './use-interactions'import type { LoopNodeType } from './types'import AddBlock from './add-block'import cn from '@/utils/classnames'import type { NodeProps } from '@/app/components/workflow/types'const Node: FC<NodeProps<LoopNodeType>> = ({  id,  data,}) => {  const { zoom } = useViewport()  const nodesInitialized = useNodesInitialized()  const { handleNodeLoopRerender } = useNodeLoopInteractions()  useEffect(() => {    if (nodesInitialized)      handleNodeLoopRerender(id)  }, [nodesInitialized, id, handleNodeLoopRerender])  return (    <div className={cn(      'relative h-full min-h-[90px] w-full min-w-[240px] rounded-2xl bg-[#F0F2F7]/90',    )}>      <Background        id={`loop-background-${id}`}        className='!z-0 rounded-2xl'        gap={[14 / zoom, 14 / zoom]}        size={2 / zoom}        color='#E4E5E7'      />      {        data._isCandidate && (          <LoopStartNodeDumb />        )      }      {        data._children!.length === 1 && (          <AddBlock            loopNodeId={id}            loopNodeData={data}          />        )      }    </div>  )}export default memo(Node)
 |