hasMatch method

  1. @override
bool? hasMatch(
  1. ModelQueryFilter filter,
  2. dynamic source
)
override

Returns whether or not source matches according to the contents of filter.

Returns true if it matches, false if it does not.

Returns Null if comparison is not possible due to type difference, etc.

filterの内容に応じて、sourceがマッチするかどうかを返します。

マッチする場合はtrue、しない場合はfalseを返します。

型が違う等で比較不可能の場合はNullを返します。

Implementation

@override
bool? hasMatch(ModelQueryFilter filter, dynamic source) {
  final target = filter.value;
  switch (filter.type) {
    case ModelQueryFilterType.equalTo:
      return _hasMatch(
        source,
        target,
        (source, target) => target.every((e) => source.contains(e)),
      );
    case ModelQueryFilterType.notEqualTo:
    case ModelQueryFilterType.lessThan:
    case ModelQueryFilterType.greaterThan:
    case ModelQueryFilterType.lessThanOrEqualTo:
    case ModelQueryFilterType.greaterThanOrEqualTo:
      return null;
    case ModelQueryFilterType.arrayContains:
      return _hasMatch(
        source,
        target,
        (source, target) => target.any((e) => source.contains(e)),
      );
    case ModelQueryFilterType.arrayContainsAny:
      if (target is List && target.isNotEmpty) {
        if (target.any((t) =>
            _hasMatch(
              source,
              t,
              (source, target) => target.any((e) => source.contains(e)),
            ) ??
            false)) {
          return true;
        }
      }
      return null;
    case ModelQueryFilterType.whereIn:
    case ModelQueryFilterType.whereNotIn:
      return null;
    default:
      return null;
  }
}