DynamicGridItemsListDataComponent.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using InABox.Clients;
  2. using InABox.Core;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. namespace InABox.DynamicGrid;
  10. public class DynamicGridItemsListDataComponent<T> : BaseDynamicGridDataComponent<T>
  11. where T : BaseObject, new()
  12. {
  13. private List<T> _items = [];
  14. public List<T> Items
  15. {
  16. get => _items;
  17. set => _items = value;
  18. }
  19. public DynamicGridItemsListDataComponent(DynamicGrid<T> grid): base(grid)
  20. {
  21. }
  22. public override void DeleteItems(params CoreRow[] rows)
  23. {
  24. foreach (var row in rows.OrderByDescending(x => x.Index))
  25. {
  26. Items.RemoveAt(Grid.GetMasterRow(row).Index);
  27. }
  28. }
  29. public override T LoadItem(CoreRow row)
  30. {
  31. return Items[Grid.GetMasterRow(row).Index];
  32. }
  33. private IOrderedEnumerable<T> OrderItems(IOrderedEnumerable<T> items, SortOrder<T> sort)
  34. {
  35. var ordered = items.ThenBy(x => CoreUtils.GetPropertyValue(x, sort.ToString()));
  36. foreach (var then in sort.Thens)
  37. {
  38. ordered = OrderItems(ordered, then);
  39. }
  40. return ordered;
  41. }
  42. private IOrderedEnumerable<T> OrderItems(IEnumerable<T> items, SortOrder<T> sort)
  43. {
  44. var ordered = items.OrderBy(x => CoreUtils.GetPropertyValue(x, sort.ToString()));
  45. foreach (var then in sort.Thens)
  46. {
  47. ordered = OrderItems(ordered, then);
  48. }
  49. return ordered;
  50. }
  51. public override void Reload(
  52. Filters<T> criteria, Columns<T> columns, SortOrder<T>? sort,
  53. CancellationToken token, Action<QueryResult> action)
  54. {
  55. var result = new CoreTable();
  56. result.LoadColumns(columns);
  57. if(sort is null)
  58. {
  59. result.LoadRows(Items);
  60. }
  61. else
  62. {
  63. result.LoadRows(OrderItems(Items, sort));
  64. }
  65. action.Invoke(new(result));
  66. }
  67. public override void SaveItem(T item)
  68. {
  69. if (!Items.Contains(item))
  70. {
  71. Items.Add(item);
  72. }
  73. }
  74. }