@using Moonlight.Frontend.Interfaces @using Moonlight.Frontend.Models @using ShadcnBlazor.Sidebars @inject NavigationManager Navigation @inject IEnumerable Providers @implements IDisposable @{ var url = new Uri(Navigation.Uri); } Logo Moonlight @foreach (var group in Items.GroupBy(x => x.Group)) { @if (!string.IsNullOrWhiteSpace(group.Key)) { @group.Key } @foreach (var item in group.OrderBy(x => x.Order)) { var isActive = item.IsExactPath ? item.Path == url.LocalPath : url.LocalPath.StartsWith(item.Path, StringComparison.OrdinalIgnoreCase); @item.Name } } @code { private readonly List Items = new(); protected override async Task OnInitializedAsync() { foreach (var provider in Providers) { Items.AddRange( await provider.GetItemsAsync() ); } Navigation.LocationChanged += OnLocationChanged; } private async void OnLocationChanged(object? sender, LocationChangedEventArgs e) { try { await InvokeAsync(StateHasChanged); } catch (Exception) { // Ignored } } public void Dispose() { Navigation.LocationChanged -= OnLocationChanged; } }