[LLC] Fix search functions

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-02-19 17:06:45 +05:30
parent e9ecd1cc35
commit 259b8f2094
3 changed files with 49 additions and 12 deletions
@@ -514,6 +514,26 @@ class Channel {
);
}
/// A message search.
Future<SearchMessagesResponse> search({
String query,
Map<String, dynamic> messageFilters,
List<SortOption> sort,
PaginationParams paginationParams,
}) {
return _client.search(
{
'cid': {
r'$in': [cid],
},
},
sort: sort,
query: query,
paginationParams: paginationParams,
messageFilters: messageFilters,
);
}
/// Delete a file from this channel
Future<EmptyResponse> deleteFile(
String url, {
+22 -12
View File
@@ -24,6 +24,7 @@ import 'exceptions.dart';
import 'models/event.dart';
import 'models/message.dart';
import 'models/user.dart';
import 'extensions/map_extension.dart';
/// Handler function used for logging records. Function requires a single [LogRecord]
/// as the only parameter.
@@ -1021,27 +1022,36 @@ class StreamChatClient {
/// A message search.
Future<SearchMessagesResponse> search(
Map<String, dynamic> filters,
List<SortOption> sort,
Map<String, dynamic> filters, {
String query,
PaginationParams paginationParams, {
List<SortOption> sort,
PaginationParams paginationParams,
Map<String, dynamic> messageFilters,
}) async {
assert(() {
if (query == null && messageFilters == null) {
throw ArgumentError('Provide at least `query` or `messageFilters`');
}
if (query != null && messageFilters != null) {
throw ArgumentError(
"Can't provide both `query` and `messageFilters` at the same time",
);
}
return true;
}());
final payload = {
'filter_conditions': filters,
if (messageFilters != null) ...{
'message_filter_conditions': messageFilters,
},
'message_filter_conditions': messageFilters,
'query': query,
'sort': sort,
};
if (paginationParams != null) ...paginationParams.toJson(),
}.nullProtected;
if (paginationParams != null) {
payload.addAll(paginationParams.toJson());
}
final response = await get('/search', queryParameters: {
'payload': json.encode(payload),
});
final response = await get('/search',
queryParameters: {'payload': json.encode(payload)});
return decode<SearchMessagesResponse>(
response.data, SearchMessagesResponse.fromJson);
}
@@ -0,0 +1,7 @@
/// Useful extension functions for [Map]
extension MapX on Map {
/// Returns a new map with null keys or values removed
Map<String, dynamic> get nullProtected {
return {...this}..removeWhere((key, value) => key == null || value == null);
}
}