From 7bf87b95a4dd74dba25921a21f6c1750ba600681 Mon Sep 17 00:00:00 2001 From: Colin Dawson Date: Fri, 13 Mar 2026 09:18:35 +0000 Subject: [PATCH] Even more UI tweaks --- .../components/VisualisetTab.tsx | 52 +++++++++++++++---- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/src/modules/manager/workflowTemplates/components/VisualisetTab.tsx b/src/modules/manager/workflowTemplates/components/VisualisetTab.tsx index 5618d5d..08609a0 100644 --- a/src/modules/manager/workflowTemplates/components/VisualisetTab.tsx +++ b/src/modules/manager/workflowTemplates/components/VisualisetTab.tsx @@ -515,6 +515,42 @@ const VisualiserTab: React.FC = ({ return eligibility; }, [edges, levelByGuid]); + const mergedRightSourcesByTarget = React.useMemo(() => { + const map = new Map>(); + + edges.forEach((edge) => { + const sourceLevel = levelByGuid.get(edge.sourceGuid) ?? 0; + const targetLevel = levelByGuid.get(edge.targetGuid) ?? 0; + const levelDelta = targetLevel - sourceLevel; + if (levelDelta <= 0) { + return; + } + + if (!mergedRightIncomingByTarget.has(edge.targetGuid)) { + return; + } + + const eligibility = rightMergeEligibleByTarget.get(edge.targetGuid); + const isMergedEdge = + (levelDelta > 1 && eligibility?.mergeLong) || + (levelDelta === 1 && eligibility?.mergeAdjacent); + + if (!isMergedEdge) { + return; + } + + const contributors = map.get(edge.targetGuid) ?? new Set(); + contributors.add(edge.sourceGuid); + map.set(edge.targetGuid, contributors); + }); + + return map; + }, [ + edges, + levelByGuid, + mergedRightIncomingByTarget, + rightMergeEligibleByTarget, + ]); const connectedByGuid = React.useMemo(() => { const map = new Map>(); @@ -706,13 +742,12 @@ const VisualiserTab: React.FC = ({ const mergedRightLaneX = mergedRightIncomingByTarget.get( edge.targetGuid, ); - const rightMergeEligibility = rightMergeEligibleByTarget.get( + const mergedRightSources = mergedRightSourcesByTarget.get( edge.targetGuid, ); const isMergedRight = mergedRightLaneX !== undefined && - ((levelDelta > 1 && rightMergeEligibility?.mergeLong) || - (levelDelta === 1 && rightMergeEligibility?.mergeAdjacent)); + (mergedRightSources?.has(edge.sourceGuid) ?? false); let path = ""; let labelX = 0; @@ -907,16 +942,11 @@ const VisualiserTab: React.FC = ({ const endX = target.x + target.width / 2; const endY = target.y; + const mergedSources = + mergedRightSourcesByTarget.get(targetGuid) ?? new Set(); const mergedIsActive = hoveredGuid !== null && - (hoveredGuid === targetGuid || - edges.some( - (edge) => - edge.targetGuid === targetGuid && - edge.sourceGuid === hoveredGuid && - (levelByGuid.get(edge.targetGuid) ?? 0) > - (levelByGuid.get(edge.sourceGuid) ?? 0), - )); + (hoveredGuid === targetGuid || mergedSources.has(hoveredGuid)); const mergedIsDim = hoveredGuid !== null && !mergedIsActive; const mergedIntensityClass = hoveredGuid === targetGuid