diff --git a/web/app/components/workflow/hooks/use-nodes-interactions.ts b/web/app/components/workflow/hooks/use-nodes-interactions.ts index edc253384c..c60cc21059 100644 --- a/web/app/components/workflow/hooks/use-nodes-interactions.ts +++ b/web/app/components/workflow/hooks/use-nodes-interactions.ts @@ -12,12 +12,10 @@ import type { } from 'reactflow' import { getConnectedEdges, - getIncomers, getOutgoers, useReactFlow, useStoreApi, } from 'reactflow' -import { uniq } from 'lodash-es' import type { ToolDefaultValue } from '../block-selector/types' import type { Edge, @@ -212,19 +210,22 @@ export const useNodesInteractions = () => { }) }) setEdges(newEdges) - const incomesNodes = getIncomers(node, nodes, edges) - if (incomesNodes.length) { - const incomesNodesOutgoersId = uniq(incomesNodes.map(incomeNode => getOutgoers(incomeNode, nodes, edges)).flat().map(outgoer => outgoer.id)) + const connectedEdges = getConnectedEdges([node], edges).filter(edge => edge.target === node.id) - if (incomesNodesOutgoersId.length > 1) { - const newNodes = produce(nodes, (draft) => { - draft.forEach((n) => { - if (incomesNodesOutgoersId.includes(n.id)) - n.data._inParallelHovering = true - }) + const targetNodes: Node[] = [] + for (let i = 0; i < connectedEdges.length; i++) { + const sourceConnectedEdges = getConnectedEdges([{ id: connectedEdges[i].source } as Node], edges).filter(edge => edge.source === connectedEdges[i].source && edge.sourceHandle === connectedEdges[i].sourceHandle) + targetNodes.push(...sourceConnectedEdges.map(edge => nodes.find(n => n.id === edge.target)!)) + } + + if (targetNodes.length > 1) { + const newNodes = produce(nodes, (draft) => { + draft.forEach((n) => { + if (targetNodes.some(targetNode => n.id === targetNode.id)) + n.data._inParallelHovering = true }) - setNodes(newNodes) - } + }) + setNodes(newNodes) } }, [store, workflowStore, getNodesReadOnly]) diff --git a/web/app/components/workflow/utils.ts b/web/app/components/workflow/utils.ts index cb68cb9564..e68709fb31 100644 --- a/web/app/components/workflow/utils.ts +++ b/web/app/components/workflow/utils.ts @@ -682,9 +682,7 @@ export const getParallelInfo = (nodes: Node[], edges: Edge[], parentNodeId?: str const outgoerConnectedEdges = getConnectedEdges([outgoer], edges).filter(edge => edge.source === outgoer.id) const sourceEdgesGroup = groupBy(outgoerConnectedEdges, 'sourceHandle') - Object.keys(sourceEdgesGroup).sort((a, b) => { - return sourceEdgesGroup[b].length - sourceEdgesGroup[a].length - }).forEach((sourceHandle) => { + Object.keys(sourceEdgesGroup).forEach((sourceHandle) => { nextHandles.push({ node: outgoer, handle: sourceHandle }) }) if (!outgoerConnectedEdges.length)