[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
|
/// Delete a file from this channel
|
||||||
Future<EmptyResponse> deleteFile(
|
Future<EmptyResponse> deleteFile(
|
||||||
String url, {
|
String url, {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import 'exceptions.dart';
|
|||||||
import 'models/event.dart';
|
import 'models/event.dart';
|
||||||
import 'models/message.dart';
|
import 'models/message.dart';
|
||||||
import 'models/user.dart';
|
import 'models/user.dart';
|
||||||
|
import 'extensions/map_extension.dart';
|
||||||
|
|
||||||
/// Handler function used for logging records. Function requires a single [LogRecord]
|
/// Handler function used for logging records. Function requires a single [LogRecord]
|
||||||
/// as the only parameter.
|
/// as the only parameter.
|
||||||
@@ -1021,27 +1022,36 @@ class StreamChatClient {
|
|||||||
|
|
||||||
/// A message search.
|
/// A message search.
|
||||||
Future<SearchMessagesResponse> search(
|
Future<SearchMessagesResponse> search(
|
||||||
Map<String, dynamic> filters,
|
Map<String, dynamic> filters, {
|
||||||
List<SortOption> sort,
|
|
||||||
String query,
|
String query,
|
||||||
PaginationParams paginationParams, {
|
List<SortOption> sort,
|
||||||
|
PaginationParams paginationParams,
|
||||||
Map<String, dynamic> messageFilters,
|
Map<String, dynamic> messageFilters,
|
||||||
}) async {
|
}) 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 = {
|
final payload = {
|
||||||
'filter_conditions': filters,
|
'filter_conditions': filters,
|
||||||
if (messageFilters != null) ...{
|
'message_filter_conditions': messageFilters,
|
||||||
'message_filter_conditions': messageFilters,
|
|
||||||
},
|
|
||||||
'query': query,
|
'query': query,
|
||||||
'sort': sort,
|
'sort': sort,
|
||||||
};
|
if (paginationParams != null) ...paginationParams.toJson(),
|
||||||
|
}.nullProtected;
|
||||||
|
|
||||||
if (paginationParams != null) {
|
final response = await get('/search', queryParameters: {
|
||||||
payload.addAll(paginationParams.toJson());
|
'payload': json.encode(payload),
|
||||||
}
|
});
|
||||||
|
|
||||||
final response = await get('/search',
|
|
||||||
queryParameters: {'payload': json.encode(payload)});
|
|
||||||
return decode<SearchMessagesResponse>(
|
return decode<SearchMessagesResponse>(
|
||||||
response.data, SearchMessagesResponse.fromJson);
|
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