From 26e1c21e70d9a7f2ad80db4c4e9efe9e51ea76e0 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 17 May 2021 12:53:37 +0200 Subject: [PATCH] add filter.raw --- .../stream_chat/lib/src/models/filter.dart | 21 +++++++++++-------- .../test/src/models/filter_test.dart | 21 +++++++++++++++++++ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/packages/stream_chat/lib/src/models/filter.dart b/packages/stream_chat/lib/src/models/filter.dart index 82ca1177..a2f4ce4b 100644 --- a/packages/stream_chat/lib/src/models/filter.dart +++ b/packages/stream_chat/lib/src/models/filter.dart @@ -1,5 +1,7 @@ // ignore_for_file: non_constant_identifier_names, constant_identifier_names +import 'dart:convert'; + import 'package:equatable/equatable.dart'; const _groupOperators = [ @@ -164,6 +166,11 @@ class Filter extends Equatable { String? key, }) = Filter.__; + /// Creates a custom [Filter] from a raw value + const factory Filter.raw({ + required Map value, + }) = Filter.__; + /// An operator used for the filter. The operator string must start with `$` final String? operator; @@ -183,16 +190,10 @@ class Filter extends Equatable { List get props => [operator, key, value]; /// Serializes to json object - Map toJson() { - final json = {}; + Map toJson() { + final json = {}; final groupOperators = _groupOperators.map((it) => it.rawValue); - assert( - (operator != null && groupOperators.contains(operator)) || key != null, - 'Filter must contain the `key` when the operator is not a ' - 'group operator.', - ); - if (groupOperators.contains(operator)) { // Filters with group operators are encoded in the following form: // { $: [ , ] } @@ -201,8 +202,10 @@ class Filter extends Equatable { // Normal filters are encoded in the following form: // { key: { $: } } json[key!] = {operator: value}; - } else { + } else if (key != null) { json[key!] = value; + } else { + return value as Map; } return json; diff --git a/packages/stream_chat/test/src/models/filter_test.dart b/packages/stream_chat/test/src/models/filter_test.dart index 99c20233..ac026c6c 100644 --- a/packages/stream_chat/test/src/models/filter_test.dart +++ b/packages/stream_chat/test/src/models/filter_test.dart @@ -130,6 +130,14 @@ void main() { expect(filter.operator, operator); }); + test('raw', () { + const value = { + 'test': ['a', 'b'], + }; + const filter = Filter.raw(value: value); + expect(filter.value, value); + }); + group('groupedOperator', () { final filter1 = Filter.equal('testKey', 'testValue'); final filter2 = Filter.in_('testKey', const ['testValue']); @@ -191,6 +199,19 @@ void main() { '{"$key":${json.encode(values)}}', ); }); + + test('raw', () { + const value = { + 'test': ['a', 'b'], + }; + const filter = Filter.raw(value: value); + + final encoded = json.encode(filter); + expect( + encoded, + json.encode(value), + ); + }); }); test('groupedFilter', () {