@using LANCommander.SDK.Extensions @namespace LANCommander.Launcher.UI.Components @inject LibraryService LibraryService @inject NavigationManager NavigationManager @inject LocalizationService LocalizationService @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 EventCallback OnItemSelected { get; set; } List Groups = new(); IEnumerable LibraryItems = []; LibraryItemFilter? Filter; Guid _currentItemId { get; set; } 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) { _currentItemId = item.Key; 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(LocalizationService.GetString("Uncategorized")); await InvokeAsync(StateHasChanged); } public void Dispose() { LibraryService.OnItemsFiltered -= LoadFilteredItems; } }