composeFilter method

Function composeFilter(
  1. FilterParams? filter
)

Implementation

Function composeFilter(FilterParams? filter) {
  filter = filter ?? FilterParams();

  var search = filter.getAsNullableString('search');
  var id = filter.getAsNullableString('id') ??
      filter.getAsNullableString('activity_id');
  var orgId = filter.getAsNullableString('org_id');
  var type = filter.getAsNullableString('type');
  var includeTypes = filter.getAsObject('include_types');
  var excludeTypes = filter.getAsObject('exclude_types');
  var partyId = filter.getAsNullableString('party_id');
  var refParentId = filter.getAsNullableString('ref_parent_id');
  var refPartyId = filter.getAsNullableString('ref_party_id');
  var refItemId = filter.getAsNullableString('ref_item_id');
  var fromTime = filter.getAsNullableDateTime('from_time');
  var toTime = filter.getAsNullableDateTime('to_time');

  // Convert string parameters to arrays
  if (includeTypes != null && includeTypes is! List) {
    includeTypes = ('' + includeTypes).split(',');
  }
  if (excludeTypes != null && excludeTypes is! List) {
    excludeTypes = ('' + excludeTypes).split(',');
  }

  return (item) {
    if (search != null && !matchSearch(item, search)) {
      return false;
    }
    if (id != null && item.id != id) {
      return false;
    }
    if (orgId != null && item.orgId != orgId) {
      return false;
    }
    if (type != null && item.type != type) {
      return false;
    }

    if (includeTypes != null && includeTypes.contains(item.id)) {
      return false;
    }
    if (excludeTypes != null && excludeTypes.contains(item.id)) {
      return false;
    }

    if (refParentId != null && !includeId(item.ref_parents, refParentId)) {
      return false;
    }
    if (refItemId != null && !includeId(item.ref_parents, refItemId)) {
      return false;
    }

    if (partyId != null && !equalIds(item.party, partyId)) {
      return false;
    }

    if (refPartyId != null && !equalIds(item.ref_party, refPartyId)) {
      return false;
    }
    if (refItemId != null && !equalIds(item.ref_item, refItemId)) {
      return false;
    }

    if (fromTime != null && item.time >= fromTime) {
      return false;
    }
    if (toTime != null && item.time < toTime) {
      return false;
    }

    return true;
  };
}