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'
import {
getConnectedEdges,
getIncomers,
getOutgoers,
useReactFlow,
useStoreApi,
} from 'reactflow'
import { uniq } from 'lodash-es'
import type { ToolDefaultValue } from '../block-selector/types'
import type {
Edge,
@ -212,20 +210,23 @@ 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 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 (incomesNodesOutgoersId.includes(n.id))
if (targetNodes.some(targetNode => n.id === targetNode.id))
n.data._inParallelHovering = true
})
})
setNodes(newNodes)
}
}
}, [store, workflowStore, getNodesReadOnly])
const handleNodeLeave = useCallback<NodeMouseHandler>((_, node) => {

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 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)