filter method

Iterable<User> filter({
  1. String? query,
  2. String? username,
  3. String? lastname,
  4. String? firstname,
  5. Vintage? vintage,
  6. List<int>? ids,
  7. Set<UserCapability> capabilities = const {},
  8. UserCapability? capability,
})

Filters this list by username, lastname, firstname, vintage and ids and returns list of users that match the filter criteria.

String values are case-insensitive. If ids is not empty, only users with an id in the list are returned.

Implementation

Iterable<User> filter({
  String? query,
  String? username,
  String? lastname,
  String? firstname,
  Vintage? vintage,
  List<int>? ids,

  /// The user must have all capabilities in this set.
  Set<UserCapability> capabilities = const {},
  UserCapability? capability,
}) {
  return where((user) {
    if (query != null &&
        !user.username.containsIgnoreCase(query) &&
        !user.lastname.containsIgnoreCase(query) &&
        !user.firstname.containsIgnoreCase(query)) {
      return false;
    }
    if (username != null && !user.username.containsIgnoreCase(username)) return false;
    if (lastname != null && !user.lastname.containsIgnoreCase(lastname)) return false;
    if (firstname != null && !user.firstname.containsIgnoreCase(firstname)) return false;
    if (ids != null && !ids.contains(user.id)) return false;
    if (vintage != null && user.vintage != vintage) return false;
    if (capabilities.isNotEmpty && !user.capabilities.has(capabilities.toList())) return false;
    if (capability != null && !user.capabilities.contains(capability)) return false;

    return true;
  });
}