getPageByFilterEx method

Future<DataPage<T>> getPageByFilterEx(
  1. String? correlationId,
  2. Function? filter,
  3. PagingParams? paging,
  4. Function? sort, [
  5. dynamic select,
])

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 items
  • paging (optional) paging parameters
  • sort (optional) sorting parameters
  • select (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;
}