From 883d3b2ece3c64f0932cba9ad933d5af6fcc0840 Mon Sep 17 00:00:00 2001 From: Maystern <12112910@mail.sustech.edu.cn> Date: Fri, 24 Jul 2026 00:43:36 +0800 Subject: [PATCH 1/3] fix(sidebar): enhance node selection to show details for single nodes Signed-off-by: Maystern <12112910@mail.sustech.edu.cn> --- graph-ui/src/components/GraphTab.tsx | 27 +++++++++++++++++++++++++-- graph-ui/src/components/Sidebar.tsx | 10 +++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/graph-ui/src/components/GraphTab.tsx b/graph-ui/src/components/GraphTab.tsx index bc05d5c14..2654bb49a 100644 --- a/graph-ui/src/components/GraphTab.tsx +++ b/graph-ui/src/components/GraphTab.tsx @@ -262,12 +262,35 @@ export function GraphTab({ project }: GraphTabProps) { if (!filteredData || !path || nodeIds.size === 0) { setHighlightedIds(null); setSelectedPath(null); + setSelectedNode(null); setCameraTarget(null); return; } setSelectedPath(path); - setHighlightedIds(nodeIds); - setCameraTarget(computeCameraTarget(filteredData.nodes, nodeIds)); + + /* Single node picked from the sidebar → also show the detail panel + * on the right and highlight its direct connections, matching the + * behaviour of clicking a node in the 3D scene. */ + if (nodeIds.size === 1) { + const nodeId = [...nodeIds][0]; + const node = filteredData.nodes.find((n) => n.id === nodeId) ?? null; + setSelectedNode(node); + + const connectedIds = new Set([nodeId]); + for (const edge of filteredData.edges) { + if (edge.source === nodeId) connectedIds.add(edge.target); + if (edge.target === nodeId) connectedIds.add(edge.source); + } + setHighlightedIds(connectedIds); + setCameraTarget( + computeCameraTarget(filteredData.nodes, connectedIds), + ); + } else { + /* Directory with multiple nodes → don't show a detail panel. */ + setSelectedNode(null); + setHighlightedIds(nodeIds); + setCameraTarget(computeCameraTarget(filteredData.nodes, nodeIds)); + } }, [filteredData], ); diff --git a/graph-ui/src/components/Sidebar.tsx b/graph-ui/src/components/Sidebar.tsx index 0343940a4..4dab26467 100644 --- a/graph-ui/src/components/Sidebar.tsx +++ b/graph-ui/src/components/Sidebar.tsx @@ -5,7 +5,7 @@ import { useUiMessages } from "../lib/i18n"; interface SidebarProps { nodes: GraphNode[]; - onSelectPath: (path: string, nodeIds: Set) => void; + onSelectPath: (path: string, nodeIds: Set, node?: GraphNode) => void; selectedPath: string | null; } @@ -61,7 +61,7 @@ function flattenSingleChild(dir: DirNode): DirNode { function TreeItem({ dir, depth, onSelect, selectedPath }: { dir: DirNode; depth: number; - onSelect: (path: string, ids: Set) => void; + onSelect: (path: string, ids: Set, node?: GraphNode) => void; selectedPath: string | null; }) { const [expanded, setExpanded] = useState(false); @@ -72,7 +72,7 @@ function TreeItem({ dir, depth, onSelect, selectedPath }: { return (