Skip to content

Commit 4d794b0

Browse files
authored
Fix navigating to resources with a selected resource (#10848)
* Fix navigating to resources with a selected resource * Clean up
1 parent 2ad77eb commit 4d794b0

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

src/Aspire.Dashboard/Components/Pages/Resources.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@
132132
ResizeColumnOnAllRows="false"
133133
GridTemplateColumns="@_manager.GetGridTemplateColumns()"
134134
RowClass="@(r => GetRowClass(r.Resource))"
135-
Loading="_isLoading"
135+
Loading="!_loadingTcs.Task.IsCompleted"
136136
ShowHover="true"
137137
TGridItem="ResourceGridViewModel"
138138
ItemKey="@(r => r.Resource.Name)"

src/Aspire.Dashboard/Components/Pages/Resources.razor.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ public partial class Resources : ComponentBase, IComponentWithTelemetry, IAsyncD
9797
private readonly CancellationTokenSource _watchTaskCancellationTokenSource = new();
9898
private readonly ConcurrentDictionary<string, ResourceViewModel> _resourceByName = new(StringComparers.ResourceName);
9999
private readonly HashSet<string> _collapsedResourceNames = new(StringComparers.ResourceName);
100+
private readonly TaskCompletionSource _loadingTcs = new(TaskCreationOptions.RunContinuationsAsynchronously);
100101
private string _filter = "";
101102
private bool _isFilterPopupVisible;
102103
private Task? _resourceSubscriptionTask;
103-
private bool _isLoading = true;
104104
private string? _elementIdBeforeDetailsViewOpened;
105105
private FluentDataGrid<ResourceGridViewModel> _dataGrid = null!;
106106
private GridColumnManager _manager = null!;
@@ -235,7 +235,7 @@ protected override async Task OnInitializedAsync()
235235
}
236236
});
237237

238-
_isLoading = false;
238+
_loadingTcs.SetResult();
239239

240240
async Task SubscribeResourcesAsync()
241241
{
@@ -522,6 +522,9 @@ protected override async Task OnParametersSetAsync()
522522
return;
523523
}
524524

525+
// Wait until the initial data is loaded. This is required so there isn't a race between data loading and using resources here.
526+
await _loadingTcs.Task;
527+
525528
// If filters were saved in page state, resource filters now need to be recomputed since the URL has changed.
526529
foreach (var resourceViewModel in _resourceByName)
527530
{
@@ -534,6 +537,10 @@ protected override async Task OnParametersSetAsync()
534537
{
535538
await ShowResourceDetailsAsync(selectedResource, buttonId: null);
536539
}
540+
else
541+
{
542+
Logger.LogDebug("Can't navigate to {ResourceName} from URL. Resource not found.", ResourceName);
543+
}
537544

538545
// Navigate to remove ?resource=xxx in the URL.
539546
NavigationManager.NavigateTo(DashboardUrls.ResourcesUrl(), new NavigationOptions { ReplaceHistoryEntry = true });
@@ -598,6 +605,8 @@ private async Task ShowContextMenuAsync(ResourceViewModel resource, int screenWi
598605

599606
private async Task ShowResourceDetailsAsync(ResourceViewModel resource, string? buttonId)
600607
{
608+
Logger.LogDebug("Showing details for resource {ResourceName}.", resource.Name);
609+
601610
_elementIdBeforeDetailsViewOpened = buttonId;
602611

603612
if (string.Equals(SelectedResource?.Name, resource.Name, StringComparisons.ResourceName))
@@ -635,6 +644,8 @@ private async Task ShowResourceDetailsAsync(ResourceViewModel resource, string?
635644

636645
private async Task ClearSelectedResourceAsync(bool causedByUserAction = false)
637646
{
647+
Logger.LogDebug("Clearing selected resource.");
648+
638649
SelectedResource = null;
639650

640651
await InvokeAsync(StateHasChanged);
@@ -781,7 +792,8 @@ private Task OnTabChangeAsync(FluentTab newTab)
781792

782793
if (id is null
783794
|| !Enum.TryParse(typeof(ResourceViewKind), id, out var o)
784-
|| o is not ResourceViewKind viewKind)
795+
|| o is not ResourceViewKind viewKind
796+
|| PageViewModel.SelectedViewKind == viewKind)
785797
{
786798
return Task.CompletedTask;
787799
}

0 commit comments

Comments
 (0)