Multi-Query Pagination
GraphQLQueryPager supports multi-query pagination. This means that you can use separate queries for fetching the initial page of data and for fetching subsequent pages of data.
In order to use multi-query pagination, you must configure the GraphQLQueryPager in order to support multiple queries. It is recommended to use an appropriate convenience initializer to create the GraphQLQueryPager instance. The initalizers that support multi-query pagination will have both an extractInitialPageInfo and extractNextPageInfo function.
In the following example, we will initialize a GraphQLQueryPager that uses forward cursor-based pagination.
1let initialQuery = MyQuery(first: 10, after: nil) 2let pager = GraphQLQueryPager( 3 client: client, 4 initialQuery: initialQuery, 5 extractInitialPageInfo: { initialQueryData in 6 // Extract a `CursorBasedPagination.Forward` instance from the initial query's `Data` 7 CursorBasedPagination.Forward( 8 hasNext: initialQueryData.values.pageInfo.hasNextPage ?? false, 9 endCursor: initialQueryData.values.pageInfo.endCursor 10 ) 11 }, 12 extractNextPageInfo: { paginatedQueryData in 13 // Extract a `CursorBasedPagination.Forward` instance from the paginated query's `Data` 14 CursorBasedPagination.Forward( 15 hasNext: paginatedQueryData.values.pageInfo.hasNextPage ?? false, 16 endCursor: paginatedQueryData.values.pageInfo.endCursor 17 ) 18 }, 19 pageResolver: { page, paginationDirection in 20 // As we only want to support forward pagination, we can return `nil` for reverse pagination 21 switch paginationDirection { 22 case .next: 23 return MyPaginatedQuery(first: 10, after: page.endCursor ?? .none) 24 case .previous: 25 return nil 26 } 27 } 28)This example demonstrates how to create a GraphQLQueryPager that uses separate queries for fetching the initial page of data and for fetching subsequent pages of data. The GraphQLQueryPager is configured to use forward cursor-based pagination. The extractInitialPageInfo and extractNextPageInfo closures are used to extract pagination information from the initial page of data and from the next page of data, respectively. The pageResolver closure is used to resolve the next page query given a CursorBasedPagination.Forward instance.
The GraphQLQueryPager instance can be used in the same way as a single-query pager. The loadNextPage method will automatically use the pageResolver closure to fetch the next page of data.