getPageByFilterEx method
Gets a page of data items retrieved by a given filter and sorted according to sort parameters.
This method shall be called by a public getPageByFilter method from child class that receives FilterParams and converts them into a filter function.
correlationId
(optional) transaction id to trace execution through call chain.filter
(optional) a filter function to filter itemspaging
(optional) paging parameterssort
(optional) sorting parametersselect
(optional) projection parameters (not used yet) Return Future that receives a data page Throws error.
Implementation
Future<DataPage<T>> getPageByFilterEx(String? correlationId, Function? filter,
PagingParams? paging, Function? sort,
[select]) async {
var items = this.items.toList();
// Filter and sort
if (filter != null) {
items = List<T>.from(items.where((item) => filter(item)));
}
if (sort != null) {
items.sort((a, b) {
var sa = sort(a);
var sb = sort(b);
if (sa > sb) return -1;
if (sa < sb) return 1;
return 0;
});
}
// Extract a page
paging = paging ?? PagingParams();
var skip = paging.getSkip(-1);
var take = paging.getTake(maxPageSize);
var total;
if (paging.total) {
total = items.length;
}
if (skip > 0) {
items.removeRange(0, skip <= items.length ? skip : items.length);
}
items =
items.getRange(0, take <= items.length ? take : items.length).toList();
logger.trace(correlationId, 'Retrieved %d items', [items.length]);
var page = DataPage<T>(items, total ?? 0);
return page;
}