This commit is contained in:
StyleZhang 2024-09-02 18:37:44 +08:00
parent 35d9c59a29
commit 70aced0100
2 changed files with 15 additions and 16 deletions

View File

@ -12,12 +12,10 @@ import type {
} from 'reactflow' } from 'reactflow'
import { import {
getConnectedEdges, getConnectedEdges,
getIncomers,
getOutgoers, getOutgoers,
useReactFlow, useReactFlow,
useStoreApi, useStoreApi,
} from 'reactflow' } from 'reactflow'
import { uniq } from 'lodash-es'
import type { ToolDefaultValue } from '../block-selector/types' import type { ToolDefaultValue } from '../block-selector/types'
import type { import type {
Edge, Edge,
@ -212,19 +210,22 @@ export const useNodesInteractions = () => {
}) })
}) })
setEdges(newEdges) setEdges(newEdges)
const incomesNodes = getIncomers(node, nodes, edges) const connectedEdges = getConnectedEdges([node], edges).filter(edge => edge.target === node.id)
if (incomesNodes.length) {
const incomesNodesOutgoersId = uniq(incomesNodes.map(incomeNode => getOutgoers(incomeNode, nodes, edges)).flat().map(outgoer => outgoer.id))
if (incomesNodesOutgoersId.length > 1) { const targetNodes: Node[] = []
const newNodes = produce(nodes, (draft) => { for (let i = 0; i < connectedEdges.length; i++) {
draft.forEach((n) => { const sourceConnectedEdges = getConnectedEdges([{ id: connectedEdges[i].source } as Node], edges).filter(edge => edge.source === connectedEdges[i].source && edge.sourceHandle === connectedEdges[i].sourceHandle)
if (incomesNodesOutgoersId.includes(n.id)) targetNodes.push(...sourceConnectedEdges.map(edge => nodes.find(n => n.id === edge.target)!))
n.data._inParallelHovering = true }
})
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]) }, [store, workflowStore, getNodesReadOnly])

View File

@ -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 outgoerConnectedEdges = getConnectedEdges([outgoer], edges).filter(edge => edge.source === outgoer.id)
const sourceEdgesGroup = groupBy(outgoerConnectedEdges, 'sourceHandle') const sourceEdgesGroup = groupBy(outgoerConnectedEdges, 'sourceHandle')
Object.keys(sourceEdgesGroup).sort((a, b) => { Object.keys(sourceEdgesGroup).forEach((sourceHandle) => {
return sourceEdgesGroup[b].length - sourceEdgesGroup[a].length
}).forEach((sourceHandle) => {
nextHandles.push({ node: outgoer, handle: sourceHandle }) nextHandles.push({ node: outgoer, handle: sourceHandle })
}) })
if (!outgoerConnectedEdges.length) if (!outgoerConnectedEdges.length)