import type { WorkflowDataUpdater } from '../types' import { useCallback } from 'react' import { useReactFlow } from 'reactflow' import { useEventEmitterContextContext } from '@/context/event-emitter' import { WORKFLOW_DATA_UPDATE } from '../constants' import { initialEdges, initialNodes } from '../utils' export const useWorkflowUpdate = () => { const reactflow = useReactFlow() const { eventEmitter } = useEventEmitterContextContext() const handleUpdateWorkflowCanvas = useCallback( (payload: WorkflowDataUpdater) => { const { nodes, edges, viewport } = payload eventEmitter?.emit({ type: WORKFLOW_DATA_UPDATE, payload: { nodes: initialNodes(nodes, edges), edges: initialEdges(edges, nodes), }, } as never) if ( viewport && typeof viewport.x === 'number' && typeof viewport.y === 'number' && typeof viewport.zoom === 'number' ) reactflow.setViewport(viewport) }, [eventEmitter, reactflow], ) return { handleUpdateWorkflowCanvas, } }