@page "/" @using DeepDrftManager.Services @attribute [Authorize] @layout Layout.CmsLayout @inject NavigationManager Nav @inject ICmsTrackService CmsTrackService @inject ILogger Logger DeepDrft CMS Catalogue @SummaryCard("Tracks", Icons.Material.Filled.LibraryMusic, Color.Primary, _tracksLoading, _trackCount) @SummaryCard("Albums", Icons.Material.Filled.Album, Color.Secondary, _albumsLoading, _albumCount) @SummaryCard("Genres", Icons.Material.Filled.Category, Color.Tertiary, _genresLoading, _genreCount) @code { private bool _tracksLoading = true; private bool _albumsLoading = true; private bool _genresLoading = true; private int? _trackCount; private int? _albumCount; private int? _genreCount; protected override async Task OnInitializedAsync() { // Three independent reads run concurrently. Each loader calls StateHasChanged in its // finally block so its card updates as soon as its own fetch returns. await Task.WhenAll(LoadTrackCount(), LoadAlbumCount(), LoadGenreCount()); } private async Task LoadTrackCount() { try { var result = await CmsTrackService.GetTrackCountAsync(); _trackCount = result.Success ? result.Value : null; if (!result.Success) { Logger.LogWarning("Dashboard track count failed: {Error}", result.Messages.FirstOrDefault()?.Message ?? "Unknown error"); } } finally { _tracksLoading = false; StateHasChanged(); } } private async Task LoadAlbumCount() { try { var result = await CmsTrackService.GetReleasesAsync(); _albumCount = result.Success && result.Value is not null ? result.Value.Count : null; if (!result.Success) { Logger.LogWarning("Dashboard album summaries failed: {Error}", result.Messages.FirstOrDefault()?.Message ?? "Unknown error"); } } finally { _albumsLoading = false; StateHasChanged(); } } private async Task LoadGenreCount() { try { var result = await CmsTrackService.GetGenreSummariesAsync(); _genreCount = result.Success && result.Value is not null ? result.Value.Count : null; if (!result.Success) { Logger.LogWarning("Dashboard genre summaries failed: {Error}", result.Messages.FirstOrDefault()?.Message ?? "Unknown error"); } } finally { _genresLoading = false; StateHasChanged(); } } private RenderFragment SummaryCard(string label, string icon, Color color, bool loading, int? count) => __builder => { @if (loading) { } else { @(count?.ToString() ?? "—") } @label View }; }