LANCommander/LANCommander.Launcher/UI/Library/Components/LibraryList.razor

76 lines
2.4 KiB
Text
Raw Normal View History

@using LANCommander.Launcher.Models
@using LANCommander.Launcher.Services.Extensions
2025-01-12 02:54:41 -06:00
@using LANCommander.SDK.Extensions
@inject LibraryService LibraryService
@inject ImportService ImportService
2024-07-11 18:50:24 -05:00
@inject MessageBusService MessageBusService
<Flex Vertical Class="library-list">
<Collapse>
@if (Groups.Count > 1)
{
foreach (var group in Groups.OrderByTitle(g => g))
{
<Panel Header="@group" Key="@group">
2024-12-31 18:21:41 -06:00
<AntList DataSource="@(LibraryItems.Where(i => i.Groups.Contains(group) || (group == "Uncategorized" && !i.Groups.Any())))" TItem="Models.ListItem" Class="ant-list-clickable" Size="ListSize.Small">
<LibraryListItem Model="@context" OnClick="() => SelectItem(context)" @bind-SelectedItem="SelectedItem" />
</AntList>
</Panel>
}
}
else
{
<Panel Class="no-header">
2024-12-31 18:21:41 -06:00
<AntList DataSource="LibraryItems" TItem="Models.ListItem" Class="ant-list-clickable" Size="ListSize.Small">
<LibraryListItem Model="@context" OnClick="() => SelectItem(context)" @bind-SelectedItem="SelectedItem" />
</AntList>
</Panel>
}
</Collapse>
<LibraryItemFilter />
</Flex>
@code {
[Parameter] public Guid? SelectedItem { get; set; }
[Parameter] public EventCallback<Guid> OnItemSelected { get; set; }
2024-11-13 00:57:00 -06:00
List<string> Groups = new();
2024-11-09 17:15:04 -06:00
IEnumerable<Models.ListItem> LibraryItems;
protected override async Task OnInitializedAsync()
{
2024-11-09 17:15:04 -06:00
LibraryService.OnItemsFiltered += LoadFilteredItems;
2024-07-11 18:50:24 -05:00
2024-11-09 17:15:04 -06:00
await LibraryService.RefreshItemsAsync();
}
2024-11-09 17:15:04 -06:00
async Task LoadFilteredItems(IEnumerable<Models.ListItem> libraryItems)
{
LibraryItems = libraryItems;
await UpdateGroups();
await InvokeAsync(StateHasChanged);
}
2024-11-09 17:15:04 -06:00
async Task SelectItem(Models.ListItem item)
{
if (OnItemSelected.HasDelegate)
await OnItemSelected.InvokeAsync(item.Key);
}
async Task UpdateGroups()
{
2024-07-11 18:50:24 -05:00
Groups = LibraryItems.SelectMany(i => i.Groups).Distinct().ToList();
2024-07-11 18:50:24 -05:00
if (LibraryItems.Any(i => i.Groups == null || i.Groups.Length == 0))
Groups.Add("Uncategorized");
2024-07-13 12:55:42 -05:00
await InvokeAsync(StateHasChanged);
}
public void Dispose()
{
2024-11-09 17:15:04 -06:00
LibraryService.OnItemsFiltered -= LoadFilteredItems;
}
}