[LLC] Fix search functions
Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
@@ -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, {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user