diff --git a/datahub-web-react/src/app/lineageV2/useComputeGraph/filterNodes.ts b/datahub-web-react/src/app/lineageV2/useComputeGraph/filterNodes.ts index b1d97ffed8..a611bf439b 100644 --- a/datahub-web-react/src/app/lineageV2/useComputeGraph/filterNodes.ts +++ b/datahub-web-react/src/app/lineageV2/useComputeGraph/filterNodes.ts @@ -129,7 +129,7 @@ function connectEdges(rootUrn: string, { nodes, edges, adjacencyList }: ContextS addToAdjacencyList(newAdjacencyList, direction, id, neighbor); const edgeId = getEdgeId(id, neighbor, direction); const existingEdge = newEdges.get(edgeId); - newEdges.set(edgeId, mergeEdges(edges.get(edgeId), existingEdge)); + newEdges.set(edgeId, mergeEdges(edges.get(edgeId), existingEdge, nodes)); buildNewAdjacencyList(neighbor, direction); } else { buildNewAdjacencyList(neighbor, direction)?.forEach((child) => { @@ -145,7 +145,7 @@ function connectEdges(rootUrn: string, { nodes, edges, adjacencyList }: ContextS isDisplayed: (firstEdge?.isDisplayed && secondEdge?.isDisplayed) ?? false, via: firstEdge?.via || secondEdge?.via, }; - newEdges.set(edgeId, mergeEdges(newEdge, existingEdge)); + newEdges.set(edgeId, mergeEdges(newEdge, existingEdge, nodes)); }); } }); @@ -168,13 +168,19 @@ function connectEdges(rootUrn: string, { nodes, edges, adjacencyList }: ContextS } /** Merge two edges, each representing a different path between two nodes. */ -function mergeEdges(edgeA?: LineageEdge, edgeB?: LineageEdge): LineageEdge { +function mergeEdges( + edgeA: LineageEdge | undefined, + edgeB: LineageEdge | undefined, + nodes: Map, +): LineageEdge { + const viaA = edgeA?.via && nodes.has(edgeA.via) ? edgeA.via : undefined; + const viaB = edgeB?.via && nodes.has(edgeB.via) ? edgeB.via : undefined; return { isManual: edgeA?.isManual && edgeB?.isManual, created: getLatestTimestamp(edgeA?.created, edgeB?.created), updated: getLatestTimestamp(edgeA?.updated, edgeB?.updated), isDisplayed: (edgeA?.isDisplayed || edgeB?.isDisplayed) ?? false, - via: edgeA?.via || edgeB?.via, + via: viaA || viaB, }; }