feat: Added a queryAround implementation

This commit is contained in:
Deven Joshi
2021-11-10 17:56:35 +05:30
parent a3cce7ffff
commit afc8026547
3 changed files with 47 additions and 7 deletions
@@ -60,8 +60,11 @@ class PaginationParams extends Equatable {
/// ``` /// ```
const PaginationParams({ const PaginationParams({
this.limit = 10, this.limit = 10,
this.before = 10,
this.after = 10,
this.offset, this.offset,
this.next, this.next,
this.aroundId,
this.greaterThan, this.greaterThan,
this.greaterThanOrEqual, this.greaterThanOrEqual,
this.lessThan, this.lessThan,
@@ -78,12 +81,22 @@ class PaginationParams extends Equatable {
/// The amount of items requested from the APIs. /// The amount of items requested from the APIs.
final int limit; final int limit;
/// The amount of items requested before message ID from the APIs.
final int before;
/// The amount of items requested after message ID from the APIs.
final int after;
/// The offset of requesting items. /// The offset of requesting items.
final int? offset; final int? offset;
/// A key used to paginate. /// A key used to paginate.
final String? next; final String? next;
/// Message ID to fetch messages around
@JsonKey(name: 'around_id')
final String? aroundId;
/// Filter on ids greater than the given value. /// Filter on ids greater than the given value.
@JsonKey(name: 'id_gt') @JsonKey(name: 'id_gt')
final String? greaterThan; final String? greaterThan;
@@ -106,7 +119,10 @@ class PaginationParams extends Equatable {
/// Creates a copy of [PaginationParams] with specified attributes overridden. /// Creates a copy of [PaginationParams] with specified attributes overridden.
PaginationParams copyWith({ PaginationParams copyWith({
int? limit, int? limit,
int? before,
int? after,
int? offset, int? offset,
String? aroundId,
String? next, String? next,
String? greaterThan, String? greaterThan,
String? greaterThanOrEqual, String? greaterThanOrEqual,
@@ -115,7 +131,10 @@ class PaginationParams extends Equatable {
}) => }) =>
PaginationParams( PaginationParams(
limit: limit ?? this.limit, limit: limit ?? this.limit,
before: before ?? this.before,
after: limit ?? this.after,
offset: offset ?? this.offset, offset: offset ?? this.offset,
aroundId: aroundId ?? this.aroundId,
next: next ?? this.next, next: next ?? this.next,
greaterThan: greaterThan ?? this.greaterThan, greaterThan: greaterThan ?? this.greaterThan,
greaterThanOrEqual: greaterThanOrEqual ?? this.greaterThanOrEqual, greaterThanOrEqual: greaterThanOrEqual ?? this.greaterThanOrEqual,
@@ -126,8 +145,11 @@ class PaginationParams extends Equatable {
@override @override
List<Object?> get props => [ List<Object?> get props => [
limit, limit,
before,
after,
offset, offset,
next, next,
aroundId,
greaterThan, greaterThan,
greaterThanOrEqual, greaterThanOrEqual,
lessThan, lessThan,
@@ -21,8 +21,11 @@ Map<String, dynamic> _$SortOptionToJson<T>(SortOption<T> instance) =>
PaginationParams _$PaginationParamsFromJson(Map<String, dynamic> json) => PaginationParams _$PaginationParamsFromJson(Map<String, dynamic> json) =>
PaginationParams( PaginationParams(
limit: json['limit'] as int? ?? 10, limit: json['limit'] as int? ?? 10,
before: json['before'] as int? ?? 10,
after: json['after'] as int? ?? 10,
offset: json['offset'] as int?, offset: json['offset'] as int?,
next: json['next'] as String?, next: json['next'] as String?,
aroundId: json['around_id'] as String?,
greaterThan: json['id_gt'] as String?, greaterThan: json['id_gt'] as String?,
greaterThanOrEqual: json['id_gte'] as String?, greaterThanOrEqual: json['id_gte'] as String?,
lessThan: json['id_lt'] as String?, lessThan: json['id_lt'] as String?,
@@ -32,6 +35,8 @@ PaginationParams _$PaginationParamsFromJson(Map<String, dynamic> json) =>
Map<String, dynamic> _$PaginationParamsToJson(PaginationParams instance) { Map<String, dynamic> _$PaginationParamsToJson(PaginationParams instance) {
final val = <String, dynamic>{ final val = <String, dynamic>{
'limit': instance.limit, 'limit': instance.limit,
'before': instance.before,
'after': instance.after,
}; };
void writeNotNull(String key, dynamic value) { void writeNotNull(String key, dynamic value) {
@@ -42,6 +47,7 @@ Map<String, dynamic> _$PaginationParamsToJson(PaginationParams instance) {
writeNotNull('offset', instance.offset); writeNotNull('offset', instance.offset);
writeNotNull('next', instance.next); writeNotNull('next', instance.next);
writeNotNull('around_id', instance.aroundId);
writeNotNull('id_gt', instance.greaterThan); writeNotNull('id_gt', instance.greaterThan);
writeNotNull('id_gte', instance.greaterThanOrEqual); writeNotNull('id_gte', instance.greaterThanOrEqual);
writeNotNull('id_lt', instance.lessThan); writeNotNull('id_lt', instance.lessThan);
@@ -249,19 +249,31 @@ class StreamChannelState extends State<StreamChannel> {
} }
return Future.wait([ return Future.wait([
queryBeforeMessage( queryAroundMessage(
messageId, messageId,
limit: before, before: before,
preferOffline: preferOffline, after: after,
),
queryAfterMessage(
messageId,
limit: after,
preferOffline: preferOffline, preferOffline: preferOffline,
), ),
]); ]);
} }
///
Future<ChannelState> queryAroundMessage(
String messageId, {
int before = 20,
int after = 20,
bool preferOffline = false,
}) =>
channel.query(
messagesPagination: PaginationParams(
aroundId: messageId,
before: before,
after: after,
),
preferOffline: preferOffline,
);
/// ///
Future<ChannelState> queryBeforeMessage( Future<ChannelState> queryBeforeMessage(
String messageId, { String messageId, {