IDynamicGridDataComponent.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 interface IDynamicGridDataComponent<T>
  11. where T : BaseObject, new()
  12. {
  13. DynamicGrid<T> Grid { get; }
  14. void Reload(Filters<T> criteria, Columns<T> columns, SortOrder<T>? sort, CancellationToken token, Action<QueryResult> action);
  15. T LoadItem(CoreRow row);
  16. T[] LoadItems(CoreRow[] rows);
  17. void SaveItem(T item);
  18. void SaveItems(T[] items);
  19. void DeleteItems(CoreRow[] rows);
  20. /// <summary>
  21. /// Loads the child tables for an export, based on the filter of the parent table.
  22. /// </summary>
  23. /// <param name="filter">Filter for the parent table.</param>
  24. /// <param name="tableColumns">A list of the child table types, with columns to load for each</param>
  25. /// <returns>A list of tables, in the same order as they came in <paramref name="tableColumns"/></returns>
  26. IEnumerable<Tuple<Type?, CoreTable>> LoadExportTables(Filters<T> filter, IEnumerable<Tuple<Type, IColumns>> tableColumns);
  27. CoreTable LoadImportKeys(string[] fields);
  28. }
  29. public abstract class BaseDynamicGridDataComponent<T> : IDynamicGridDataComponent<T>
  30. where T : BaseObject, new()
  31. {
  32. public DynamicGrid<T> Grid { get; private set; }
  33. public BaseDynamicGridDataComponent(DynamicGrid<T> grid)
  34. {
  35. Grid = grid;
  36. }
  37. public abstract void DeleteItems(CoreRow[] rows);
  38. public abstract T LoadItem(CoreRow row);
  39. public virtual T[] LoadItems(CoreRow[] rows) => rows.ToArray(LoadItem);
  40. public abstract void Reload(Filters<T> criteria, Columns<T> columns, SortOrder<T>? sort, CancellationToken token, Action<QueryResult> action);
  41. public abstract void SaveItem(T item);
  42. public virtual void SaveItems(T[] items)
  43. {
  44. foreach(var item in items)
  45. {
  46. SaveItem(item);
  47. }
  48. }
  49. public virtual IEnumerable<Tuple<Type?, CoreTable>> LoadExportTables(Filters<T> filter, IEnumerable<Tuple<Type, IColumns>> tableColumns)
  50. {
  51. return tableColumns.Select(x =>
  52. {
  53. var table = new CoreTable();
  54. table.LoadColumns(x.Item2);
  55. return new Tuple<Type?, CoreTable>(x.Item1, table);
  56. });
  57. }
  58. public virtual CoreTable LoadImportKeys(String[] fields)
  59. {
  60. var result = new CoreTable();
  61. result.LoadColumns(Columns.None<T>().Add(fields));
  62. return result;
  63. }
  64. }