Skip to content

Dashboard resource navigation and parameter overview - #21793

Draft
James Newton-King (JamesNK) wants to merge 3 commits into
mainfrom
jamesnk/dashboard-resource-navigation
Draft

James Newton-King (JamesNK) wants to merge 3 commits into
mainfrom
jamesnk/dashboard-resource-navigation

Conversation

@JamesNK

Copy link
Copy Markdown
Member

Description

Draft for trying the CI build and gathering feedback on dashboard navigation: collapsed resource picker, selection preserved across pages, resource-detail Close, and a parameter overview with missing-value review.

Fixes # (issue)

User-facing usage

Install the CI build using the PR dogfooding guide. Try resource selection across Resources, Parameters, and logs, plus the missing-parameter button.

Screenshots / Recordings

This PR includes UI changes. Please add screenshots or screen recordings so reviewers can evaluate the visual changes without running locally.

  • For before/after comparisons, place them side-by-side or label them clearly.
  • For interactive changes (animations, transitions, new flows), prefer a short screen recording (GIF or video).
  • If you cannot capture visuals now, note what scenario to test and mark this section as TODO.

TODO: record the picker and parameter-review flows above; the hidden browser capture was incomplete.

Validation: 406 tests passed; desktop/mobile manually verified
$env:MSBUILDTERMINALLOGGER = 'false'
dotnet test --project tests\Aspire.Dashboard.Components.Tests\Aspire.Dashboard.Components.Tests.csproj --no-launch-profile -- --filter-class '*.ResourcesLayoutTests' --filter-class '*.ResourcesLayoutActivityTests' --filter-class '*.ResourceOverview*' --filter-class '*.ApplicationSummaryTests' --filter-class '*.ResourcesTests' --filter-class '*.ResourcesNavigationTests' --filter-class '*.RoutedComponentTrimmingTests' --filter-not-trait 'quarantined=true' --filter-not-trait 'outerloop=true'

Result: passed, 406 tests. Full repository suite not run.

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

@github-actions

github-actions Bot commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 21793

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 21793"

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unmounting the collapsed pane leaves the animation test hanging, while unresolved resource-selection and popup-sizing defects impair dashboard interactions.

6 open issues
4 files not reviewed
  • src/Aspire.Dashboard/Resources/Layout.Designer.cs: Generated file
  • src/Aspire.Dashboard/Resources/Resources.Designer.cs: Generated file
  • src/Aspire.Dashboard/Resources/StructuredLogs.Designer.cs: Generated file
  • src/Aspire.Dashboard/Resources/Traces.Designer.cs: Generated file
What changed in this PR

This PR updates Aspire Dashboard navigation and introduces a dedicated parameter overview, with resource selection carried across pages and a focused flow for reviewing missing values.

Changes:

  • Adds a collapsed resource picker, page-specific resource lists, and a Close action for resource details.
  • Adds parameter summaries and missing-value review while preserving the resource graph preference.
  • Improves telemetry empty states and updates component tests, documentation, and localization resources.
File Description
tests/​Aspire.Dashboard.Components.Tests/​Shared/​ResourceSetupHelpers.cs Mocks picker JavaScript calls.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​TracesTests.cs Tests resource-specific empty states and clearing selection.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​StructuredLogsTests.cs Tests empty-state navigation to all resources.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​ResourcesTests.cs Tests parameter sidebar selection.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​ResourceOverviewParametersTests.cs Covers parameter summaries, live updates, and missing-value review.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​ResourceOverviewEmptyPanelsTests.cs Updates coverage for hidden panels and Close.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​MetricsTests.cs Tests selection prompts without telemetry.
tests/​Aspire.Dashboard.Components.Tests/​Layout/​MobileNavMenuTests.cs Covers mobile Parameters navigation.
tests/​Aspire.Dashboard.Components.Tests/​Layout/​DesktopNavMenuTests.cs Covers desktop Parameters navigation.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​ApplicationSummaryTests.cs Tests app-wide missing-parameter counts.
src/​Shared/​DashboardUrls.cs Adds missing-parameter review URLs.
src/​Aspire.Dashboard/​Utils/​BrowserStorageKeys.cs Removes the resource-kind preference key.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.zh-Hant.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.zh-Hans.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.tr.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.ru.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.pt-BR.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.pl.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.ko.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.ja.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.it.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.fr.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.es.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.de.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Traces.cs.xlf Adds trace empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.zh-Hant.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.zh-Hans.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.tr.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.ru.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.pt-BR.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.pl.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.ko.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.ja.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.it.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.fr.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.es.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.de.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​StructuredLogs.cs.xlf Adds log empty-state localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.zh-Hant.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.zh-Hans.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.tr.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.ru.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.pt-BR.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.pl.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.ko.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.ja.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.it.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.fr.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.es.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.de.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Resources.cs.xlf Adds parameter-summary localization entries.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.zh-Hant.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.zh-Hans.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.tr.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.ru.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.pt-BR.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.pl.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.ko.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.ja.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.it.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.fr.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.es.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.de.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​xlf/​Layout.cs.xlf Adds the “All” localization entry.
src/​Aspire.Dashboard/​Resources/​Traces.resx Defines resource-specific trace messages.
src/​Aspire.Dashboard/​Resources/​Traces.Designer.cs Exposes new trace strings.
src/​Aspire.Dashboard/​Resources/​StructuredLogs.resx Defines resource-specific log messages.
src/​Aspire.Dashboard/​Resources/​StructuredLogs.Designer.cs Exposes new structured-log strings.
src/​Aspire.Dashboard/​Resources/​Resources.resx Defines parameter-summary labels and headlines.
src/​Aspire.Dashboard/​Resources/​Resources.Designer.cs Exposes parameter-summary strings.
src/​Aspire.Dashboard/​Resources/​Layout.resx Defines the sidebar “All” label.
src/​Aspire.Dashboard/​Resources/​Layout.Designer.cs Exposes the “All” label.
src/​Aspire.Dashboard/​README.md Documents navigation, selection, and parameter workflows.
src/​Aspire.Dashboard/​DashboardWebApplication.cs Removes the deleted redirect’s trimming registration.
src/​Aspire.Dashboard/​Components/​Pages/​Traces.razor Offers all-resource navigation from empty traces.
src/​Aspire.Dashboard/​Components/​Pages/​StructuredLogs.razor Offers all-resource navigation from empty logs.
src/​Aspire.Dashboard/​Components/​Pages/​Resources.razor.cs Integrates parameter selection with the shared layout.
src/​Aspire.Dashboard/​Components/​Pages/​Resources.razor Renders parameter overviews and routes selection actions.
src/​Aspire.Dashboard/​Components/​Pages/​ResourceOverview.razor.css Removes panel-selector styling.
src/​Aspire.Dashboard/​Components/​Pages/​ResourceOverview.razor.cs Adds parameter-review state and adjusts subscriptions.
src/​Aspire.Dashboard/​Components/​Pages/​ResourceOverview.razor Implements parameter routing and always hides empty panels.
src/​Aspire.Dashboard/​Components/​Pages/​ParametersRedirect.razor.cs Removes the Parameters redirect implementation.
src/​Aspire.Dashboard/​Components/​Pages/​ParametersRedirect.razor Removes the redirect route.
src/​Aspire.Dashboard/​Components/​Pages/​Metrics.razor Prompts selection for resources without telemetry.
src/​Aspire.Dashboard/​Components/​Layout/​ResourcesLayout.razor.js Adds native picker handling and revises activity observation.
src/​Aspire.Dashboard/​Components/​Layout/​ResourcesLayout.razor.css Styles the picker and Close action.
src/​Aspire.Dashboard/​Components/​Layout/​ResourcesLayout.razor Adds picker markup, page-specific lists, and Close.
src/​Aspire.Dashboard/​Components/​Layout/​MobileNavMenu.razor.cs Adds mobile Parameters navigation.
src/​Aspire.Dashboard/​Components/​Layout/​DesktopNavMenu.razor.cs Adds desktop Parameters navigation.
src/​Aspire.Dashboard/​Components/​Controls/​ApplicationSummary.razor.cs Computes parameter summaries and app-wide missing values.
src/​Aspire.Dashboard/​Components/​Controls/​ApplicationSummary.razor Renders parameter summaries and missing-value links.

Review effort: Balanced

Comment on lines +406 to +409
@if (_isResourcePickerOpen)
{
@resourcePane
}
var allResources = _resourceByName.Values.Where(r => MatchesPage(r) && !r.IsResourceHidden(_filter.ShowHiddenResources)).ToList();
var allResourceCount = allResources.Count(r => !r.IsParameter);
var allParameterCount = allResources.Count(r => r.IsParameter);
var allTelemetrySourceCount = DashboardClient.IsEnabled ? paneTelemetrySourceCount : _telemetryOnlyResources.Count;
Comment on lines +233 to +238
.resource-pane.resource-pane-popup {
flex: 0 1 auto;
width: 100%;
max-height: min(600px, calc(100dvh - 120px));
border-right: 0;
}
Comment on lines +71 to +73
// The collapsed picker can unmount the pane. Observe its stable workspace so
// expanding it can resume activity without retaining the previous pane node.
resize.observe(layoutElement);
</div>
}
else if (PageViewModel.Instruments == null)
else if (PageViewModel.Instruments == null || ResourcesLayout?.SelectedResourceWithoutTelemetryName is not null)

const resourcePickers = new WeakMap();

export function setResourcePickerOpen(layoutElement, dotNetRef, open) {
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve selections across Parameters, show resource-specific telemetry empty states, keep the picker open for modifier clicks, and add a close button to resource overviews.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Restore page-specific sidebar filtering and All selection after rebasing.
Keep the resource-detail close action and always hide empty panels.
Replace the Parameters grid with a parameter-specific attention summary.
Restore app-wide missing-parameter links and the missing-value review flow.
Validated with 406 focused dashboard component tests and desktop/mobile browser checks.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

Tests selector

16 / 101 PR test projects · 5 PR jobs, from 92 changed files.

Selected PR test projects (16 / 101)

Aspire.Cli.EndToEnd.Tests, Aspire.Cli.Tests, Aspire.Dashboard.Components.Tests, Aspire.Dashboard.Tests, Aspire.Hosting.Azure.Kubernetes.Tests, Aspire.Hosting.Azure.Tests, Aspire.Hosting.Blazor.Tests, Aspire.Hosting.Dotnet.Tests, Aspire.Hosting.DotnetTool.Tests, Aspire.Hosting.JavaScript.Tests, Aspire.Hosting.Radius.Tests, Aspire.Hosting.Testing.Tests, Aspire.Hosting.Tests, Aspire.Playground.Tests, Aspire.Templates.Tests, Infrastructure.Tests

Selected PR jobs (5)

cli-starter-validation, extension-e2e, native-dashboard-validation, polyglot, typescript-api-compat


How these were chosen — grouped by what changed

⚠️ 11 of the 16 selected test projects come from a single change — src/Aspire.Dashboard/Components/Controls/ApplicationSummary.razor.

🔧 src/Aspire.Dashboard/Components/Controls/ApplicationSummary.razor (changed source)
→ 11 via the project graph: Aspire.Dashboard.Tests, Aspire.Hosting.Azure.Kubernetes.Tests (3 hops), Aspire.Hosting.Azure.Tests (2 hops), Aspire.Hosting.Blazor.Tests (2 hops), Aspire.Hosting.Dotnet.Tests (2 hops), Aspire.Hosting.DotnetTool.Tests (2 hops), Aspire.Hosting.JavaScript.Tests, Aspire.Hosting.Radius.Tests (2 hops), Aspire.Hosting.Testing.Tests, Aspire.Hosting.Tests, Aspire.Playground.Tests (2 hops)

📦 affected project Aspire.Cli
→ 1 test: Aspire.Cli.EndToEnd.Tests

📦 affected project Aspire.Dashboard
→ 1 test: Aspire.Templates.Tests

🔧 src/Aspire.Dashboard/Resources/Layout.resx (changed source)
→ 1 directly: Infrastructure.Tests

🔧 src/Aspire.Dashboard/Resources/Resources.resx (changed source)
→ 1 directly: Infrastructure.Tests

🔧 src/Aspire.Dashboard/Resources/StructuredLogs.resx (changed source)
→ 1 directly: Infrastructure.Tests

🔧 src/Aspire.Dashboard/Resources/Traces.resx (changed source)
→ 1 directly: Infrastructure.Tests

🔧 src/Shared/DashboardUrls.cs (changed source)
→ 1 via the project graph: Aspire.Cli.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Controls/ApplicationSummaryTests.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Layout/DesktopNavMenuTests.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Layout/MobileNavMenuTests.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Layout/ResourcesLayoutTests.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Pages/MetricsTests.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Pages/ResourceOverviewEmptyPanelsTests.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Pages/ResourceOverviewParametersTests.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Pages/ResourcesTests.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Pages/StructuredLogsTests.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Pages/TracesTests.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

🧪 tests/Aspire.Dashboard.Components.Tests/Shared/ResourceSetupHelpers.cs (changed test)
→ 1 directly: Aspire.Dashboard.Components.Tests

Job reasons

Job Triggered by
cli-starter-validation affected project Aspire.Cli
extension-e2e • src/Aspire.Dashboard/Components/Controls/ApplicationSummary.razor, src/Aspire.Dashboard/Components/Controls/ApplicationSummary.razor.cs, src/Aspire.Dashboard/Components/Layout/DesktopNavMenu.razor.cs, src/Aspire.Dashboard/Components/Layout/MobileNavMenu.razor.cs, src/Aspire.Dashboard/Components/Layout/ResourcesLayout.razor, src/Aspire.Dashboard/Components/Layout/ResourcesLayout.razor.cs, src/Aspire.Dashboard/Components/Layout/ResourcesLayout.razor.css, src/Aspire.Dashboard/Components/Layout/ResourcesLayout.razor.js, src/Aspire.Dashboard/Components/Pages/Metrics.razor, src/Aspire.Dashboard/Components/Pages/ParametersRedirect.razor, src/Aspire.Dashboard/Components/Pages/ParametersRedirect.razor.cs, src/Aspire.Dashboard/Components/Pages/ResourceOverview.razor, src/Aspire.Dashboard/Components/Pages/ResourceOverview.razor.cs, src/Aspire.Dashboard/Components/Pages/ResourceOverview.razor.css, src/Aspire.Dashboard/Components/Pages/Resources.razor, src/Aspire.Dashboard/Components/Pages/Resources.razor.cs, src/Aspire.Dashboard/Components/Pages/StructuredLogs.razor, src/Aspire.Dashboard/Components/Pages/Traces.razor, src/Aspire.Dashboard/DashboardWebApplication.cs, src/Aspire.Dashboard/Resources/Layout.Designer.cs, src/Aspire.Dashboard/Resources/Layout.resx, src/Aspire.Dashboard/Resources/Resources.Designer.cs, src/Aspire.Dashboard/Resources/Resources.resx, src/Aspire.Dashboard/Resources/StructuredLogs.Designer.cs, src/Aspire.Dashboard/Resources/StructuredLogs.resx, src/Aspire.Dashboard/Resources/Traces.Designer.cs, src/Aspire.Dashboard/Resources/Traces.resx, src/Aspire.Dashboard/Resources/xlf/Layout.cs.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.de.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.es.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.fr.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.it.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.ja.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.ko.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.pl.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.pt-BR.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.ru.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.tr.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.zh-Hans.xlf, src/Aspire.Dashboard/Resources/xlf/Layout.zh-Hant.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.cs.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.de.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.es.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.fr.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.it.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.ja.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.ko.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.pl.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.pt-BR.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.ru.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.tr.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.zh-Hans.xlf, src/Aspire.Dashboard/Resources/xlf/Resources.zh-Hant.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.cs.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.de.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.es.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.fr.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.it.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.ja.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.ko.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.pl.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.pt-BR.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.ru.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.tr.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.zh-Hans.xlf, src/Aspire.Dashboard/Resources/xlf/StructuredLogs.zh-Hant.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.cs.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.de.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.es.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.fr.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.it.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.ja.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.ko.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.pl.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.pt-BR.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.ru.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.tr.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.zh-Hans.xlf, src/Aspire.Dashboard/Resources/xlf/Traces.zh-Hant.xlf, src/Aspire.Dashboard/Utils/BrowserStorageKeys.cs
• affected project Aspire.Dashboard
native-dashboard-validation affected project Aspire.Dashboard
polyglot affected project Aspire.Cli
typescript-api-compat affected project Aspire.Cli

Selection computed for commit d081738.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The resource picker has unresolved mobile-selection and keyboard-focus defects, while existing browser tests target removed controls and lack coverage for native popover interactions.

9 open issues
4 files not reviewed
  • src/Aspire.Dashboard/Resources/Layout.Designer.cs: Generated file
  • src/Aspire.Dashboard/Resources/Resources.Designer.cs: Generated file
  • src/Aspire.Dashboard/Resources/StructuredLogs.Designer.cs: Generated file
  • src/Aspire.Dashboard/Resources/Traces.Designer.cs: Generated file

Review effort: Balanced

var allParameterCount = allResources.Count(r => r.IsParameter);
var allTelemetrySourceCount = DashboardClient.IsEnabled ? paneTelemetrySourceCount : _telemetryOnlyResources.Count;
var allResourcesText = Loc[DashboardClient.IsEnabled ? nameof(Dashboard.Resources.Layout.ResourceHeaderAllResources) : nameof(Dashboard.Resources.Layout.TelemetryHeaderAllSources)].Value;
var allResourcesText = Loc[DashboardClient.IsEnabled ? nameof(Dashboard.Resources.Layout.ResourcePaneAll) : nameof(Dashboard.Resources.Layout.TelemetryHeaderAllSources)].Value;
foreach (var row in paneRows)
{
RenderResourceRow(__builder, row.Resource, row, treeGuides[row.Resource.Name]);
@((RenderFragment)(builder => RenderResourceRow(builder, row.Resource, row, treeGuides[row.Resource.Name])))
Comment on lines +406 to +409
@if (_isResourcePickerOpen)
{
@resourcePane
}
@JamesNK James Newton-King (JamesNK) changed the title Improve dashboard resource navigation and parameter overview Dashboard resource navigation and parameter overview Nov 5, 2026
@github-actions

github-actions Bot commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

David Pine (IEvangelist) pushed a commit that referenced this pull request Nov 6, 2026
## Description

Make resource switching available while the dashboard sidebar is
collapsed, without reopening the full sidebar. This extracts only the
resource-selector dropdown from #21793.

### User-facing usage

Click the resource-name button to open the searchable resource list.
Normal selection closes it; Ctrl/Cmd/Shift selection keeps it open.
Selecting all closes it. Mobile retains the existing drawer.

### Validation

- Passed: **1,394 component tests** (before the final CSS-only
adjustments):
  ```powershell
dotnet test --project
tests\Aspire.Dashboard.Components.Tests\Aspire.Dashboard.Components.Tests.csproj
--no-launch-profile -- --filter-not-trait "quarantined=true"
--filter-not-trait "outerloop=true"
  ```
- Passed after the styling changes:
  ```powershell
aspire resource aspire-dashboard rebuild --apphost
playground\TestShop\TestShop.AppHost\TestShop.AppHost.csproj
--non-interactive
  ```
- Browser-verified popup placement, normal/modifier selection, Select
all, dismissal, and button styling.

### Screenshots / Recordings

> **This PR includes UI changes.** Please add screenshots or screen
recordings so reviewers can evaluate the visual changes without running
locally.
>
> - For before/after comparisons, place them side-by-side or label them
clearly.
> - For interactive changes (animations, transitions, new flows), prefer
a short screen recording (GIF or video).
> - If you cannot capture visuals now, note what scenario to test and
mark this section as TODO.

![Resource selector
dropdown](https://github.com/user-attachments/assets/d5b18733-0a7a-4b1f-bb0f-9e63a1744894)

Fixes # (issue)

## Checklist

- Is this feature complete?
  - [x] Yes. Ready to ship.
  - [ ] No. Follow-up changes expected.
- Are you including unit tests for the changes and scenario tests if
relevant?
  - [x] Yes
  - [ ] No
- Did you add public API?
  - [ ] Yes
    - If yes, did you have an API Review for it?
      - [ ] Yes
      - [ ] No
- Did you add `<remarks />` and `<code />` elements on your triple slash
comments?
      - [ ] Yes
      - [ ] No
  - [x] No
- Does the change make any security assumptions or guarantees?
  - [ ] Yes
    - If yes, have you done a threat model and had a security review?
      - [ ] Yes
      - [ ] No
  - [x] No

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants