reduce method

  1. @override
Filter reduce()
override

Tries to simplify the Filter structure to avoid redundancy.

Implementation

@override
Filter reduce() {
  final reduced = filters
      .map((f) => f.reduce())
      .where((element) => !element.isEmpty)
      .toList(growable: false);

  if (reduced.isEmpty) {
    return Filter.empty;
  } else if (reduced.length == 1) {
    return reduced.single;
  } else {
    // TODO solve unnecessarily nested groups
    return FilterGroup(reduced, type);
  }
}