archived property
latefinal
Implementation
@override
late final ArchivedPaginated archived = ArchivedPaginated(
pagination: Pagination(
onKey: (e) => e.id,
perPage: 15,
provider: DriftGraphQlPageProvider(
alwaysFetch: true,
driftProvider: DriftPageProvider(
watch: ({int? after, int? before, ChatId? around}) {
final int limit = (after ?? 0) + (before ?? 0) + 1;
return _chatLocal.watchArchive(limit: limit > 1 ? limit : null);
},
watchUpdates: (a, b) => a.value.isArchived != b.value.isArchived,
onAdded: (e) async {
final ChatVersion? stored = archived.items[e.id]?.ver;
Log.debug(
'archived.onAdded -> $e -> stored == null(${stored == null}) || e.ver > stored(${e.ver > stored})',
'$runtimeType',
);
if (stored == null || e.ver > stored) {
await archived.pagination?.put(
e,
ignoreBounds: true,
store: false,
);
}
},
onRemoved: (e) async {
Log.debug('archived.onRemoved -> $e', '$runtimeType');
await archived.pagination?.remove(e.value.id, store: false);
},
onKey: (e) => e.value.id,
onCursor: (e) => e?.recentCursor,
add: (e, {bool toView = true}) async {
if (toView) {
await _chatLocal.upsertBulk(e);
}
},
delete: (e) async => await _chatLocal.delete(e),
reset: () async => await _chatLocal.clear(),
isLast: (_, _) => false,
isFirst: (_, _) => false,
fulfilledWhenNone: true,
compare: (a, b) => a.value.compareTo(b.value),
),
graphQlProvider: GraphQlPageProvider(
fetch: ({after, before, first, last}) => _recentChats(
after: after,
before: before,
first: first,
last: last,
archived: true,
),
),
),
compare: (a, b) => a.value.compareTo(b.value),
),
transform: ({required DtoChat data, RxChatImpl? previous}) {
return previous ?? get(data.id);
},
);