LibSelector.razor 1.2 KB

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