| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 | 
                        - 'use client'
 - 
 - import {
 -   useCallback,
 -   useState,
 - } from 'react'
 - import ReactFlow, {
 -   Background,
 -   MiniMap,
 -   ReactFlowProvider,
 -   SelectionMode,
 -   applyEdgeChanges,
 -   applyNodeChanges,
 - } from 'reactflow'
 - import type {
 -   EdgeChange,
 -   NodeChange,
 -   Viewport,
 - } from 'reactflow'
 - import 'reactflow/dist/style.css'
 - import '../style.css'
 - import { CUSTOM_ITERATION_START_NODE } from '@/app/components/workflow/nodes/iteration-start/constants'
 - import { CUSTOM_LOOP_START_NODE } from '@/app/components/workflow/nodes/loop-start/constants'
 - import { CUSTOM_SIMPLE_NODE } from '@/app/components/workflow/simple-node/constants'
 - import CustomConnectionLine from '@/app/components/workflow/custom-connection-line'
 - import {
 -   CUSTOM_EDGE,
 -   CUSTOM_NODE,
 -   ITERATION_CHILDREN_Z_INDEX,
 - } from '@/app/components/workflow/constants'
 - import cn from '@/utils/classnames'
 - import {
 -   initialEdges,
 -   initialNodes,
 - } from '@/app/components/workflow/utils/workflow-init'
 - import type {
 -   Edge,
 -   Node,
 - } from '@/app/components/workflow/types'
 - import { CUSTOM_NOTE_NODE } from '@/app/components/workflow/note-node/constants'
 - import CustomNode from './components/nodes'
 - import CustomEdge from './components/custom-edge'
 - import ZoomInOut from './components/zoom-in-out'
 - import IterationStartNode from './components/nodes/iteration-start'
 - import LoopStartNode from './components/nodes/loop-start'
 - import CustomNoteNode from './components/note-node'
 - 
 - const nodeTypes = {
 -   [CUSTOM_NODE]: CustomNode,
 -   [CUSTOM_NOTE_NODE]: CustomNoteNode,
 -   [CUSTOM_SIMPLE_NODE]: CustomNode,
 -   [CUSTOM_ITERATION_START_NODE]: IterationStartNode,
 -   [CUSTOM_LOOP_START_NODE]: LoopStartNode,
 - }
 - const edgeTypes = {
 -   [CUSTOM_EDGE]: CustomEdge,
 - }
 - 
 - type WorkflowPreviewProps = {
 -   nodes: Node[]
 -   edges: Edge[]
 -   viewport: Viewport
 -   className?: string
 - }
 - const WorkflowPreview = ({
 -   nodes,
 -   edges,
 -   viewport,
 -   className,
 - }: WorkflowPreviewProps) => {
 -   const [nodesData, setNodesData] = useState(initialNodes(nodes, edges))
 -   const [edgesData, setEdgesData] = useState(initialEdges(edges, nodes))
 - 
 -   const onNodesChange = useCallback(
 -     (changes: NodeChange[]) => setNodesData(nds => applyNodeChanges(changes, nds)),
 -     [],
 -   )
 -   const onEdgesChange = useCallback(
 -     (changes: EdgeChange[]) => setEdgesData(eds => applyEdgeChanges(changes, eds)),
 -     [],
 -   )
 - 
 -   return (
 -     <div
 -       id='workflow-container'
 -       className={cn(
 -         'relative h-full w-full',
 -         className,
 -       )}
 -     >
 -       <>
 -         <MiniMap
 -           pannable
 -           zoomable
 -           style={{
 -             width: 102,
 -             height: 72,
 -           }}
 -           maskColor='var(--color-workflow-minimap-bg)'
 -           className='!absolute !bottom-14 !left-4 z-[9] !m-0 !h-[72px] !w-[102px] !rounded-lg !border-[0.5px]
 -           !border-divider-subtle !bg-background-default-subtle !shadow-md !shadow-shadow-shadow-5'
 -         />
 -         <div className='absolute bottom-4 left-4 z-[9] mt-1 flex items-center gap-2'>
 -           <ZoomInOut />
 -         </div>
 -       </>
 -       <ReactFlow
 -         nodeTypes={nodeTypes}
 -         edgeTypes={edgeTypes}
 -         nodes={nodesData}
 -         onNodesChange={onNodesChange}
 -         edges={edgesData}
 -         onEdgesChange={onEdgesChange}
 -         connectionLineComponent={CustomConnectionLine}
 -         connectionLineContainerStyle={{ zIndex: ITERATION_CHILDREN_Z_INDEX }}
 -         defaultViewport={viewport}
 -         multiSelectionKeyCode={null}
 -         deleteKeyCode={null}
 -         nodesDraggable
 -         nodesConnectable={false}
 -         nodesFocusable={false}
 -         edgesFocusable={false}
 -         panOnScroll={false}
 -         selectionKeyCode={null}
 -         selectionMode={SelectionMode.Partial}
 -         minZoom={0.25}
 -       >
 -         <Background
 -           gap={[14, 14]}
 -           size={2}
 -           className='bg-workflow-canvas-workflow-bg'
 -           color='var(--color-workflow-canvas-workflow-dot-color)'
 -         />
 -       </ReactFlow>
 -     </div>
 -   )
 - }
 - 
 - const WorkflowPreviewWrapper = (props: WorkflowPreviewProps) => {
 -   return (
 -     <ReactFlowProvider>
 -       <WorkflowPreview {...props} />
 -     </ReactFlowProvider>
 -   )
 - }
 - 
 - export default WorkflowPreviewWrapper
 
 
  |