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