Reputation: 13
As per the relay specs, total number of rows should be provided in the connection itself. But I couldn't find a way to provide total number of rows or page count etc...
https://graphql.org/learn/pagination/
I am referring below sample provided for relay based pagination.
Upvotes: 0
Views: 160
Reputation: 15469
That's a curious case. Relay Connection spec actually does not mention totalCount
in the Connection
object, but their examples randomly include that field anyway.
Either way, you can extends SPQR's Page
as you see fit. You can have a look at the testExtendedPageMapping
test which makes use of a custom ExtendedPage
.
The resolver itself looks like this:
@GraphQLQuery(name = "extended")
public ExtendedPage<Book> getExtended(
@GraphQLArgument(name = "first") int limit,
@GraphQLArgument(name = "after") String after) {
long offset = Long.parseLong(after);
List<Book> books = db.queryForBooks(limit, offset);
long totalCount = db.getTotalCount();
//Create ExtendedPage that has totalCount field
return PageFactory.createOffsetBasedPage(books, totalCount, offset,
(edges, info) -> new ExtendedPage<>(edges, info, totalCount));
}
ExtendedPage
is a simple implementation of Page
:
public class ExtendedPage<N> implements Page<N> {
private final List<Edge<N>> edges;
private final PageInfo pageInfo;
private final long totalCount;
ExtendedPage(List<Edge<N>> edges, PageInfo pageInfo, long totalCount) {
this.edges = edges;
this.pageInfo = pageInfo;
this.totalCount = totalCount;
}
@Override
public List<Edge<N>> getEdges() {
return edges;
}
@Override
public PageInfo getPageInfo() {
return pageInfo;
}
public long getTotalCount() {
return totalCount;
}
}
Upvotes: 0