dify/web/app/components/workflow/hooks/use-workflow-update.ts

38 lines
1.0 KiB
TypeScript

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,
}
}