using System; using System.Collections.Generic; using System.Linq; using InABox.Core; namespace comal.timesheets { public abstract class ListDataModel : CoreDataModel, IListDataModel where TEntity : Entity, IRemotable, IPersistent, new() where TItem : CoreDataModelItem, new() { public SortOrder Sort => LookupFactory.DefineSort(); private IEnumerable _allitems; private IList _items = new List(); public IList Items { get => _items; set => SetProperty(ref _items, value); } public void Search(Func predicate) { Items = predicate != null ? new List(_allitems.Where(predicate)) : new List(_allitems); } public virtual void BeforeLoad(MultiQuery query, Filter filter) { } public virtual void AfterLoad(MultiQuery query, Filter filter) { } public void Load(Filter filter, Action loaded = null) { MultiQuery query = new MultiQuery(); query.Add( filter, Columns, Sort ); BeforeLoad(query, filter); query.Query( (q) => { _allitems = new List(q.Get().Rows.Select(row => new TItem() { Row = row, Parent = this })); Search(null); AfterLoad(q, filter); loaded?.Invoke(); }); } } }