links method

  1. @override
Paginated<DirectLinkSlug, DirectLink> links({
  1. UserId? userId,
  2. ChatId? chatId,
})
override

Returns DirectLinks owned by the authenticated MyUser or the specified Chat-group.

Implementation

@override
Paginated<DirectLinkSlug, DirectLink> links({
  UserId? userId,
  ChatId? chatId,
}) {
  final identifier = _LinkDestination(userId: userId, chatId: chatId);

  final existing = _paginates[identifier];
  if (existing != null) {
    return existing;
  }

  return _paginates[identifier] = PaginatedImpl(
    pagination: Pagination<DirectLink, DirectLinksCursor, DirectLinkSlug>(
      perPage: 15,
      provider: GraphQlPageProvider(
        fetch:
            ({
              int? first,
              int? last,
              DirectLinksCursor? before,
              DirectLinksCursor? after,
            }) async {
              if (chatId?.isLocal == true) {
                return Page([], PageInfo());
              }

              final query = await _graphQlProvider.directLinks(
                chatId: chatId,
                by: userId == null
                    ? null
                    : DirectLinksFilter(
                        location: DirectLinkLocationInput(userId: userId),
                      ),
                pagination: DirectLinksPagination(
                  first: first,
                  after: after,
                  last: last,
                  before: before,
                ),
              );

              return Page(
                query.edges
                    .map((e) => e.node.toDto(cursor: e.cursor))
                    .map((e) => e.value)
                    .toList(),
                query.pageInfo.toModel(DirectLinksCursor.new),
              );
            },
      ),
      onKey: (e) => e.slug,
      compare: (a, b) => a.compareTo(b),
    ),
  );
}