@using LANCommander.Launcher.Models @using LANCommander.Launcher.Services.Extensions @using LANCommander.SDK.Extensions @inject LibraryService LibraryService @inject ImportService ImportService @inject MessageBusService MessageBusService @inject NavigationManager NavigationManager @if (LibraryService.Items == null || !LibraryService.Items.Any()) { } else { if (LibraryItems == null || !LibraryItems.Any()) { } else { @if (Groups.Count > 1) { foreach (var group in Groups.OrderByTitle(g => g)) { } } else { } } } @code { [Parameter] public Guid? SelectedItem { get; set; } [Parameter] public EventCallback OnItemSelected { get; set; } List Groups = new(); IEnumerable LibraryItems; LibraryItemFilter Filter; protected override async Task OnInitializedAsync() { LibraryService.OnItemsFiltered += LoadFilteredItems; await LibraryService.RefreshItemsAsync(); } async Task LoadFilteredItems(IEnumerable libraryItems) { LibraryItems = libraryItems; await UpdateGroups(); await InvokeAsync(StateHasChanged); } async Task SelectItem(Models.ListItem item) { if (OnItemSelected.HasDelegate) await OnItemSelected.InvokeAsync(item.Key); } async Task UpdateGroups() { Groups = LibraryItems.SelectMany(i => i.Groups).Distinct().ToList(); if (LibraryItems.Any(i => i.Groups == null || i.Groups.Length == 0)) Groups.Add("Uncategorized"); await InvokeAsync(StateHasChanged); } public void Dispose() { LibraryService.OnItemsFiltered -= LoadFilteredItems; } }