141 references to ResourceTab
Aspire.Dashboard (87)
Components\Layout\DesktopNavMenu.razor.cs (6)
106internal static string GetSelectionPageUrl(NavigationManager navigationManager, ResourceTab tab) 109if (tab == ResourceTab.Overview && ResourcesLayout.ParsePaneMode(path) == ResourcePaneMode.Telemetry) 124if (tab == ResourceTab.Overview && resourceNames.Count == 0) 130return ResourcesLayout.ParsePaneMode(path) == ResourcePaneMode.Telemetry && tab is not (ResourceTab.Overview or ResourceTab.Console) 141yield return new NavItem(NavSection.Resources, GetSelectionPageUrl(NavigationManager, ResourceTab.Overview), Loc[nameof(Resources.Layout.NavMenuResourcesTab)], ResourcesIcon(), ResourcesIcon(active: true));
Components\Layout\ResourcesLayout.razor.cs (77)
73private ResourceTab? _navigatingToTab; 170internal ResourceTab CurrentTab { get; private set; } 420var previousTab = CurrentTab; 542&& parsedLocation.Tab == ResourceTab.Overview 557internal string GetTabUrl(ResourceTab tab) 559if (!IsMultiSelection && tab is ResourceTab.Overview or ResourceTab.Terminal && 560CurrentTab is ResourceTab.Overview or ResourceTab.Terminal && 564return DashboardUrls.SetResourceTerminalFocus(NavigationManager.Uri, focused: tab == ResourceTab.Terminal); 567if (tab == ResourceTab.Metrics && _selectedResourceNames.Count == 0 && !DashboardClient.IsEnabled && 665return new ResourceLocation(ResourceTab.Overview, RouteResourceName: null, SelectedResourceNames: [], KeepSelection: false); 674return new ResourceLocation(ResourceTab.Traces, RouteResourceName: null, SelectedResourceNames: [], KeepSelection: true); 677var tab = segments[0].ToLowerInvariant() switch 679DashboardUrls.ParametersBasePath => ResourceTab.Parameters, 680DashboardUrls.ConsoleLogBasePath => ResourceTab.Console, 681DashboardUrls.TerminalsBasePath => ResourceTab.Terminal, 682DashboardUrls.StructuredLogsBasePath => ResourceTab.StructuredLogs, 683DashboardUrls.TracesBasePath => ResourceTab.Traces, 684DashboardUrls.MetricsBasePath => ResourceTab.Metrics, 685_ => ResourceTab.Overview 689if (tab == ResourceTab.Overview) 722if (tab == ResourceTab.Overview && routeResourceName is not null && 727tab = ResourceTab.Terminal; 831NavigationManager.NavigateTo(GetTabUrl(ResourceTab.Overview, resourceNames), new NavigationOptions { ReplaceHistoryEntry = true }); 1666internal bool IsTabAvailable(ResourceTab tab) => IsTabAvailable(tab, _selectedItems); 1668private bool IsTabAvailable(ResourceTab tab, IReadOnlyList<SelectedResourceItem> selection) 1670if (tab == ResourceTab.Terminal) 1675if (tab == ResourceTab.Parameters) 1682if (IsTelemetryPane && tab is ResourceTab.Overview or ResourceTab.Console) 1697private bool IsTabAvailable(ResourceTab tab, SelectedResourceItem item) 1703return tab == ResourceTab.Overview; 1709ResourceTab.Overview or ResourceTab.Console => true, 1710ResourceTab.Traces => telemetryResource is not null, 1717return tab is ResourceTab.StructuredLogs or ResourceTab.Traces or ResourceTab.Metrics; 1724internal static string GetTabUrl(ResourceTab tab, IReadOnlyList<string> resourceNames, string? activeResourceName = null) 1732ResourceTab.Overview => DashboardUrls.ResourceOverviewUrl(), 1733ResourceTab.Parameters => DashboardUrls.ParametersUrl(), 1734ResourceTab.Console => DashboardUrls.ConsoleLogsUrl(), 1735ResourceTab.Terminal => DashboardUrls.TerminalsUrl(), 1736ResourceTab.StructuredLogs => DashboardUrls.StructuredLogsUrl(), 1737ResourceTab.Traces => DashboardUrls.TracesUrl(), 1738ResourceTab.Metrics => DashboardUrls.MetricsUrl(activeResourceName is not null && resourceNames.Contains(activeResourceName, StringComparers.ResourceName) ? activeResourceName : null), 1748ResourceTab.Overview => DashboardUrls.ResourceOverviewUrl(resourceName), 1749ResourceTab.Parameters => resourceName is null 1752ResourceTab.Console => DashboardUrls.ConsoleLogsUrl(resourceName), 1753ResourceTab.Terminal => resourceName is null ? DashboardUrls.TerminalsUrl() : 1755ResourceTab.StructuredLogs => DashboardUrls.StructuredLogsUrl(resourceName), 1756ResourceTab.Traces => DashboardUrls.TracesUrl(resourceName), 1757ResourceTab.Metrics => DashboardUrls.MetricsUrl(resourceName), 1778ResourceTab tab; 1783else if (CurrentTab == ResourceTab.Metrics && selection is not [{ Resource: { IsParameter: true } }]) 1786tab = ResourceTab.Metrics; 1790tab = ResourceTab.Overview; 1794tab = ResourceTab.Overview; 1799tab = ResourceTab.StructuredLogs; 1916NavigationManager.NavigateTo(DashboardClient.IsEnabled && CurrentTab == ResourceTab.Overview ? DashboardUrls.ResourceListUrl() : GetSelectionUrl([])); 2012private static string GetTabId(ResourceTab tab) => $"tab-{tab}"; 2028|| !Enum.TryParse<ResourceTab>(id["tab-".Length..], out var tab) 2048if (CurrentTab == ResourceTab.Parameters) 2050yield return CreateTab(ResourceTab.Parameters, Loc[nameof(Resources.Layout.NavMenuParametersTab)], new Icons.Regular.Size24.Key(), isVisible: true); 2061yield return CreateTab(ResourceTab.Overview, Loc[nameof(Resources.Layout.ResourceTabOverview)], new Icons.Regular.Size24.Board(), 2063yield return CreateTab(ResourceTab.Console, Loc[nameof(Resources.Layout.NavMenuConsoleLogsTab)], new Icons.Regular.Size24.SlideText(), 2065yield return CreateTab(ResourceTab.Terminal, TerminalLoc[nameof(TerminalStrings.TerminalTitle)], new Icons.Regular.Size20.WindowConsole(), 2066isVisible: IsTabAvailable(ResourceTab.Terminal) || CurrentTab == ResourceTab.Terminal); 2067yield return CreateTab(ResourceTab.StructuredLogs, StructuredLogsLoc[nameof(Resources.StructuredLogs.StructuredLogsHeader)], new Icons.Regular.Size24.SlideTextSparkle(), 2069yield return CreateTab(ResourceTab.Traces, Loc[nameof(Resources.Layout.NavMenuTracesTab)], new Icons.Regular.Size24.GanttChart(), 2071yield return CreateTab(ResourceTab.Metrics, Loc[nameof(Resources.Layout.NavMenuMetricsTab)], new Icons.Regular.Size24.ChartMultiple(), 2074TabItem CreateTab(ResourceTab tab, string text, Icon icon, bool isVisible, int errorCount = 0) 2155internal sealed record ResourceLocation(ResourceTab Tab, string? RouteResourceName, IReadOnlyList<string> SelectedResourceNames, bool KeepSelection); 2163private sealed record TabItem(ResourceTab Tab, string Text, Icon Icon, bool IsVisible, string Href, int ErrorCount, bool IsAvailable);
Components\Pages\ResourceOverview.razor.cs (1)
123private bool IsTerminalFocused => ResourcesLayout?.CurrentTab == ResourceTab.Terminal &&
Components\Pages\StructuredLogs.razor.cs (1)
273NavigationManager.NavigateTo(ResourcesLayout?.GetTabUrl(ResourceTab.StructuredLogs) ?? DashboardUrls.StructuredLogsUrl(), new NavigationOptions { ReplaceHistoryEntry = true });
Components\Pages\Terminals.razor.cs (1)
127if (location.Tab != ResourceTab.Terminal ||
Components\Pages\TraceDetail.razor.cs (1)
190private string TracesListUrl => ResourcesLayout?.GetTabUrl(ResourceTab.Traces) ?? DashboardUrls.TracesUrl();
Aspire.Dashboard.Components.Tests (54)
Layout\ResourcesLayoutTests.cs (7)
425Assert.True(cut.Instance.IsTabAvailable(ResourceTab.Terminal)); 447Assert.False(cut.Instance.IsTabAvailable(ResourceTab.Terminal)); 619Assert.Equal(ResourceTab.Terminal, cut.Instance.CurrentTab); 631Assert.Equal(ResourceTab.Terminal, cut.Instance.CurrentTab); 647Assert.False(cut.Instance.IsTabAvailable(ResourceTab.Terminal)); 1350Assert.Equal("/traces?resource=api&resource=worker", cut.Instance.GetTabUrl(ResourceTab.Traces)); 1434Assert.Equal("/traces/resource/browser", cut.Instance.GetTabUrl(ResourceTab.Traces));
Layout\ResourcesNavigationTests.cs (44)
10using ResourceTab = Aspire.Dashboard.Components.Layout.ResourceTab; 87[InlineData("resources", nameof(ResourceTab.Overview), null, false)] 88[InlineData("resources/frontend", nameof(ResourceTab.Overview), "frontend", false)] 89[InlineData("resources/my%20app?x=1", nameof(ResourceTab.Overview), "my app", false)] 90[InlineData("resources/shell?terminal=true", nameof(ResourceTab.Terminal), "shell", false)] 91[InlineData("resources/shell?pane=tags&terminal=TRUE#output", nameof(ResourceTab.Terminal), "shell", false)] 92[InlineData("resources/shell?terminal=false", nameof(ResourceTab.Overview), "shell", false)] 93[InlineData("resources/shell?terminal=invalid", nameof(ResourceTab.Overview), "shell", false)] 94[InlineData("resources?terminal=true", nameof(ResourceTab.Overview), null, false)] 95[InlineData("consolelogs", nameof(ResourceTab.Console), null, false)] 96[InlineData("consolelogs/resource/frontend", nameof(ResourceTab.Console), "frontend", false)] 97[InlineData("terminals", nameof(ResourceTab.Terminal), null, false)] 98[InlineData("terminals/resource/shell%20%231", nameof(ResourceTab.Terminal), "shell #1", false)] 99[InlineData("structuredlogs/resource/api?logLevel=error", nameof(ResourceTab.StructuredLogs), "api", false)] 100[InlineData("traces", nameof(ResourceTab.Traces), null, false)] 101[InlineData("traces/resource/api", nameof(ResourceTab.Traces), "api", false)] 102[InlineData("traces/detail/abc123", nameof(ResourceTab.Traces), null, true)] 103[InlineData("metrics/resource/api", nameof(ResourceTab.Metrics), "api", false)] 108Assert.Equal(Enum.Parse<ResourceTab>(expectedTab), location.Tab); 115[InlineData("resources?resource=api&resource=worker", nameof(ResourceTab.Overview), null, new[] { "api", "worker" })] 116[InlineData("consolelogs?resource=api&resource=worker&resource=api", nameof(ResourceTab.Console), null, new[] { "api", "worker" })] 117[InlineData("structuredlogs?logLevel=error&resource=api&resource=my%20app", nameof(ResourceTab.StructuredLogs), null, new[] { "api", "my app" })] 118[InlineData("metrics/resource/worker?resource=api&resource=worker#chart", nameof(ResourceTab.Metrics), "worker", new[] { "api", "worker" })] 119[InlineData("resources/api?resource=", nameof(ResourceTab.Overview), "api", new[] { "api" })] 124Assert.Equal(Enum.Parse<ResourceTab>(expectedTab), location.Tab); 131[InlineData(nameof(ResourceTab.Overview), "api", "/resources/api")] 132[InlineData(nameof(ResourceTab.Overview), null, "/resources")] 133[InlineData(nameof(ResourceTab.Console), "api", "/consolelogs/resource/api")] 134[InlineData(nameof(ResourceTab.Console), null, "/consolelogs")] 135[InlineData(nameof(ResourceTab.Terminal), "shell #1", "/resources/shell%20%231?terminal=true")] 136[InlineData(nameof(ResourceTab.Terminal), null, "/terminals")] 137[InlineData(nameof(ResourceTab.StructuredLogs), "api", "/structuredlogs/resource/api")] 138[InlineData(nameof(ResourceTab.Traces), null, "/traces")] 139[InlineData(nameof(ResourceTab.Metrics), "api", "/metrics/resource/api")] 140[InlineData(nameof(ResourceTab.Metrics), null, "/metrics")] 143Assert.Equal(expectedUrl, ResourcesLayout.GetTabUrl(Enum.Parse<ResourceTab>(tab), resourceName is null ? [] : [resourceName])); 159[InlineData(nameof(ResourceTab.Overview), null, "/resources?resource=api&resource=worker")] 160[InlineData(nameof(ResourceTab.Console), null, "/consolelogs?resource=api&resource=worker")] 161[InlineData(nameof(ResourceTab.StructuredLogs), null, "/structuredlogs?resource=api&resource=worker")] 162[InlineData(nameof(ResourceTab.Traces), "api", "/traces?resource=api&resource=worker")] 163[InlineData(nameof(ResourceTab.Metrics), "worker", "/metrics/resource/worker?resource=api&resource=worker")] 164[InlineData(nameof(ResourceTab.Metrics), "other", "/metrics?resource=api&resource=worker")] 165[InlineData(nameof(ResourceTab.Metrics), null, "/metrics?resource=api&resource=worker")] 168Assert.Equal(expectedUrl, ResourcesLayout.GetTabUrl(Enum.Parse<ResourceTab>(tab), ["api", "worker"], activeResourceName));
Pages\ResourceOverviewTerminalTests.cs (2)
70Assert.Equal(ResourceTab.Terminal, cut.Instance.CurrentTab); 80Assert.Equal(ResourceTab.Overview, cut.Instance.CurrentTab);
Pages\TerminalsTests.cs (1)
54Assert.Equal(ResourceTab.Terminal, cut.Instance.CurrentTab);