run method

  1. @override
FilterUseCaseResult<T> run()
override

Implementation

@override
FilterUseCaseResult<T> run() {
  final enabledFilters = filters.where((e) => e.isEnabled);

  if (data.isEmpty) {
    return FilterUseCaseResult(
      originalData: data,
      filteredData: data,
      appliedFilters: enabledFilters,
    );
  }

  if (enabledFilters.isEmpty) {
    return FilterUseCaseResult(
      originalData: data,
      filteredData: data,
      appliedFilters: const [],
    );
  }

  bool composedPredicate(T item) => enabledFilters.every((e) => e.predicate(item));

  final filteredData = data.where(composedPredicate);

  return FilterUseCaseResult(
    originalData: data,
    filteredData: filteredData,
    appliedFilters: enabledFilters,
  );
}