LibSelector.razor 1.2 KB

1234567891011121314151617181920212223242526272829
  1. <Select2 class="flex-fill" TItem="FeLibrary"
  2. TSource="FeLibrary[]"
  3. IdSelector="c => c.Key"
  4. TextSelector="@(c =>c.Name+" ("+c.Discs.Length+")")"
  5. FilterFunction="FilterLibrary"
  6. GetElementById="async (items, id, token) => items.FirstOrDefault(q=>q.Key==id)"
  7. Datasource="FnzDataSet.AllLibrary.OrderBy(p=>p.Key).ToArray()"
  8. Value="@SelectedLibs"
  9. Multiselect="false"
  10. OnValueChanged="OnValueChanged" />
  11. @code {
  12. [Parameter, Required]
  13. public List<FeLibrary> SelectedLibs { get; set; } = new();
  14. [Parameter] public EventCallback OnValueChanged { get; set; } = EventCallback.Empty;
  15. private async Task<List<FeLibrary>> FilterLibrary(IReadOnlyCollection<FeLibrary> source, string input, CancellationToken ct)
  16. {
  17. var result = new List<FeLibrary>();
  18. foreach (var item in source.Where(p => p.Name.StartsWith(input, StringComparison.OrdinalIgnoreCase))) result.Add(item);
  19. foreach (var item in source.Where(p => !p.Name.StartsWith(input, StringComparison.OrdinalIgnoreCase) && p.Name.Contains(input, StringComparison.OrdinalIgnoreCase))) result.Add(item);
  20. return result;
  21. }
  22. }