LibSelector.razor 1.6 KB

1234567891011121314151617181920212223242526272829303132333435
  1. <div class="d-flex flex-row bd-highlight mt-2">
  2. <div style="padding-right:5px;">
  3. Lobrary (@Libraries.Count) :
  4. </div>
  5. <Select2 class="flex-fill" TItem="KeyValuePair<string,Library>"
  6. TSource="IReadOnlyCollection<KeyValuePair<string,Library>>"
  7. IdSelector="c => c.Key"
  8. TextSelector="@(c =>c.Value.Name+" | Disc: ("+c.Value.Discs.Count+")")"
  9. FilterFunction="FilterLibrary"
  10. GetElementById="async (items, id, token) => items.FirstOrDefault(q=>q.Key==id)"
  11. Datasource="Libraries.OrderBy(p=>p.Key).ToArray()"
  12. Value="@SelectedLibs"
  13. Multiselect="false"
  14. OnValueChanged="OnValueChanged" />
  15. </div>
  16. @code {
  17. [Parameter,Required]
  18. public IDictionary<string, Library> Libraries{ get; set; }
  19. [Parameter, Required]
  20. public List<KeyValuePair<string, Library>> SelectedLibs { get; set; } = new();
  21. [Parameter] public EventCallback OnValueChanged { get; set; } = EventCallback.Empty;
  22. private async Task<List<KeyValuePair<string, Library>>> FilterLibrary(IReadOnlyCollection<KeyValuePair<string, Library>> source, string input, CancellationToken ct)
  23. {
  24. var result = new List<KeyValuePair<string, Library>>();
  25. foreach (var item in source.Where(p => p.Value.Name.StartsWith(input, StringComparison.OrdinalIgnoreCase))) result.Add(item);
  26. foreach (var item in source.Where(p => !p.Value.Name.StartsWith(input, StringComparison.OrdinalIgnoreCase) && p.Value.Name.Contains(input, StringComparison.OrdinalIgnoreCase))) result.Add(item);
  27. return result;
  28. }
  29. }