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