diff --git a/ui/src/components/LayoutShell.tsx b/ui/src/components/LayoutShell.tsx index 7a5c7aa6..999ff86f 100644 --- a/ui/src/components/LayoutShell.tsx +++ b/ui/src/components/LayoutShell.tsx @@ -98,11 +98,17 @@ function LayoutContent() { const { open: paletteOpen, setOpen: setPaletteOpen } = useCommandPalette(); const { scope, setTab } = useScope(); - // Exchange full-text search via command palette + // Exchange full-text search via command palette (scoped to current sidebar selection) const [paletteQuery, setPaletteQuery] = useState(''); const debouncedQuery = useDebouncedValue(paletteQuery, 300); const { data: exchangeResults } = useSearchExecutions( - { text: debouncedQuery || undefined, offset: 0, limit: 10 }, + { + text: debouncedQuery || undefined, + application: scope.appId || undefined, + routeId: scope.routeId || undefined, + offset: 0, + limit: 10, + }, false, ); @@ -243,13 +249,17 @@ function LayoutContent() { navigate(`${baseParts.join('/')}?text=${encodeURIComponent(query)}`); }, [navigate, scope.appId, scope.routeId]); - // Translate Sidebar's internal paths to our URL structure + // Translate Sidebar's internal paths to our URL structure. + // Pass `sidebarReveal` state so the Sidebar can highlight the selected entry + // (it compares its internal /apps/... paths against this state value). const handleSidebarNavigate = useCallback((path: string) => { + const state = { sidebarReveal: path }; + // /apps/:appId and /apps/:appId/:routeId → current tab const appMatch = path.match(/^\/apps\/([^/]+)(?:\/(.+))?$/); if (appMatch) { const [, sAppId, sRouteId] = appMatch; - navigate(sRouteId ? `/${scope.tab}/${sAppId}/${sRouteId}` : `/${scope.tab}/${sAppId}`); + navigate(sRouteId ? `/${scope.tab}/${sAppId}/${sRouteId}` : `/${scope.tab}/${sAppId}`, { state }); return; } @@ -257,11 +267,11 @@ function LayoutContent() { const agentMatch = path.match(/^\/agents\/([^/]+)(?:\/(.+))?$/); if (agentMatch) { const [, sAppId, sInstanceId] = agentMatch; - navigate(sInstanceId ? `/runtime/${sAppId}/${sInstanceId}` : `/runtime/${sAppId}`); + navigate(sInstanceId ? `/runtime/${sAppId}/${sInstanceId}` : `/runtime/${sAppId}`, { state }); return; } - navigate(path); + navigate(path, { state }); }, [navigate, scope.tab]); return (