archived property

  1. @override
ArchivedPaginated archived
latefinal

Returns the Paginated of archived RxChats.

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);
  },
);