using InABox.Clients; using InABox.Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace InABox.DynamicGrid; public class DynamicGridItemsListDataComponent : BaseDynamicGridDataComponent where T : BaseObject, new() { private List _items = []; public List Items { get => _items; set => _items = value; } public DynamicGridItemsListDataComponent(DynamicGrid grid): base(grid) { } public override void DeleteItems(params CoreRow[] rows) { foreach (var row in rows.OrderByDescending(x => x.Index)) { Items.RemoveAt(Grid.GetMasterRow(row).Index); } } public override T LoadItem(CoreRow row) { return Items[Grid.GetMasterRow(row).Index]; } private IOrderedEnumerable OrderItems(IOrderedEnumerable items, SortOrder sort) { var ordered = items.ThenBy(x => CoreUtils.GetPropertyValue(x, sort.ToString())); foreach (var then in sort.Thens) { ordered = OrderItems(ordered, then); } return ordered; } private IOrderedEnumerable OrderItems(IEnumerable items, SortOrder sort) { var ordered = items.OrderBy(x => CoreUtils.GetPropertyValue(x, sort.ToString())); foreach (var then in sort.Thens) { ordered = OrderItems(ordered, then); } return ordered; } public override void Reload( Filters criteria, Columns columns, SortOrder? sort, CancellationToken token, Action action) { var result = new CoreTable(); result.LoadColumns(columns); if(sort is null) { result.LoadRows(Items); } else { result.LoadRows(OrderItems(Items, sort)); } action.Invoke(new(result)); } public override void SaveItem(T item) { if (!Items.Contains(item)) { Items.Add(item); } } }