import { useCallback } from 'react' import { useStoreApi } from 'reactflow' import produce from 'immer' import type { WorkflowStartedResponse } from '@/types/workflow' import { WorkflowRunningStatus } from '@/app/components/workflow/types' import { useWorkflowStore } from '@/app/components/workflow/store' export const useWorkflowStarted = () => { const store = useStoreApi() const workflowStore = useWorkflowStore() const handleWorkflowStarted = useCallback((params: WorkflowStartedResponse) => { const { task_id, data } = params const { workflowRunningData, setWorkflowRunningData, setIterParallelLogMap, } = workflowStore.getState() const { getNodes, setNodes, edges, setEdges, } = store.getState() setIterParallelLogMap(new Map()) setWorkflowRunningData(produce(workflowRunningData!, (draft) => { draft.task_id = task_id draft.result = { ...draft?.result, ...data, status: WorkflowRunningStatus.Running, } })) const nodes = getNodes() const newNodes = produce(nodes, (draft) => { draft.forEach((node) => { node.data._waitingRun = true node.data._runningBranchId = undefined }) }) setNodes(newNodes) const newEdges = produce(edges, (draft) => { draft.forEach((edge) => { edge.data = { ...edge.data, _sourceRunningStatus: undefined, _targetRunningStatus: undefined, _waitingRun: true, } }) }) setEdges(newEdges) }, [workflowStore, store]) return { handleWorkflowStarted, } }