diff --git a/web/app/components/workflow/hooks/use-workflow-run.ts b/web/app/components/workflow/hooks/use-workflow-run.ts index e60a356cb2..a445a31f61 100644 --- a/web/app/components/workflow/hooks/use-workflow-run.ts +++ b/web/app/components/workflow/hooks/use-workflow-run.ts @@ -332,6 +332,8 @@ export const useWorkflowRun = () => { const currentIndex = draft.tracing!.findIndex((trace) => { if (!trace.execution_metadata?.parallel_id) return trace.node_id === data.node_id + if (trace.execution_metadata?.parallel_id === data.execution_metadata?.parallel_id) + return trace.node_id === data.node_id && trace.execution_metadata?.parallel_start_node_id === data.execution_metadata?.parallel_start_node_id return trace.node_id === data.node_id && trace.execution_metadata?.parallel_id === data.execution_metadata?.parallel_id }) diff --git a/web/app/components/workflow/panel/debug-and-preview/hooks.ts b/web/app/components/workflow/panel/debug-and-preview/hooks.ts index b46711e37d..978666b6a5 100644 --- a/web/app/components/workflow/panel/debug-and-preview/hooks.ts +++ b/web/app/components/workflow/panel/debug-and-preview/hooks.ts @@ -385,6 +385,8 @@ export const useChat = ( const currentIndex = responseItem.workflowProcess!.tracing!.findIndex((item) => { if (!item.execution_metadata?.parallel_id) return item.node_id === data.node_id + if (item.execution_metadata?.parallel_id === data.execution_metadata?.parallel_id) + return item.node_id === data.node_id && item.execution_metadata?.parallel_start_node_id === data.execution_metadata?.parallel_start_node_id return item.node_id === data.node_id && item.execution_metadata?.parallel_id === data.execution_metadata?.parallel_id }) diff --git a/web/app/components/workflow/run/tracing-panel.tsx b/web/app/components/workflow/run/tracing-panel.tsx index 0cf3074a2d..8fecaf8a9b 100644 --- a/web/app/components/workflow/run/tracing-panel.tsx +++ b/web/app/components/workflow/run/tracing-panel.tsx @@ -37,7 +37,7 @@ function buildLogTree(nodes: NodeTracing[]): TracingNodeProps[] { const levelCounts: { [key: string]: number } = {} const parallelChildCounts: { [key: string]: Set } = {} - function getParallelTitle(parentId: string | null): string { + const getParallelTitle = (parentId: string | null): string => { const levelKey = parentId || 'root' if (!levelCounts[levelKey]) levelCounts[levelKey] = 0 @@ -50,7 +50,7 @@ function buildLogTree(nodes: NodeTracing[]): TracingNodeProps[] { return `PARALLEL-${levelNumber}${letter}` } - function getBranchTitle(parentId: string | null, branchNum: number): string { + const getBranchTitle = (parentId: string | null, branchNum: number): string => { const levelKey = parentId || 'root' const parentTitle = parentId ? parallelStacks[parentId].parallelTitle : '' const levelNumber = parentTitle ? parseInt(parentTitle.split('-')[1]) + 1 : 1 @@ -153,6 +153,7 @@ const TracingPanel: FC = ({ list, onShowIterationDetail }) => const newSet = new Set(prev) if (newSet.has(id)) newSet.delete(id) + else newSet.add(id) @@ -165,12 +166,18 @@ const TracingPanel: FC = ({ list, onShowIterationDetail }) => }, []) const handleParallelMouseLeave = useCallback((e: React.MouseEvent) => { - const relatedTarget = e.relatedTarget as HTMLElement - const closestParallel = relatedTarget?.closest('[data-parallel-id]') - if (closestParallel) - setHoveredParallel(closestParallel.getAttribute('data-parallel-id')) - else + const relatedTarget = e.relatedTarget as Element | null + if (relatedTarget && 'closest' in relatedTarget) { + const closestParallel = relatedTarget.closest('[data-parallel-id]') + if (closestParallel) + setHoveredParallel(closestParallel.getAttribute('data-parallel-id')) + + else + setHoveredParallel(null) + } + else { setHoveredParallel(null) + } }, []) const renderNode = (node: TracingNodeProps) => {