private void GetProductsList(ProductsPaginatedHandler callback, int?first = null, string after = null) { ConnectionLoader loader = new ConnectionLoader(Loader); int countToLoad = first == null ? int.MaxValue : (int)first; loader.QueryConnection( (response) => { QueryRootQuery query = null; List <ProductEdge> edges = response != null ? response.data.shop().products().edges() : null; if (edges != null) { countToLoad -= edges.Count; } if (response == null || (countToLoad > 0 && response.data.shop().products().pageInfo().hasNextPage())) { query = new QueryRootQuery(); query = new QueryRootQuery(); DefaultQueries.products.ShopProducts( query: query, imageResolutions: DefaultImageResolutions, first: countToLoad > DefaultQueries.MaxProductPageSize ? DefaultQueries.MaxProductPageSize : countToLoad, after: edges != null ? edges[edges.Count - 1].cursor() : after ); } return(query); }, (response) => { return(((QueryRoot)response).shop().products()); }, (response) => { var error = (ShopifyError)response; if (error != null) { callback(null, error, null); } else { string lastCursor = null; if (response.data.shop().products().pageInfo().hasNextPage()) { List <ProductEdge> productEdges = response.data.shop().products().edges(); lastCursor = productEdges[productEdges.Count - 1].cursor(); } callback((List <Product>)response.data.shop().products(), error, lastCursor); } } ); }
public void TestConnectionLoader() { int countRequests = 0; ConnectionLoader ConnectionLoader = new ConnectionLoader(new QueryLoader(new CollectionTestLoader())); List <QueryResponse> responsesToRequestQuery = new List <QueryResponse>(); QueryResponse mergedResponse = null; ConnectionLoader.QueryConnection( (response) => { responsesToRequestQuery.Add(response); if (countRequests < CollectionTestQueries.queries.Count) { countRequests++; return(CollectionTestQueries.queries[countRequests - 1]); } else { return(null); } }, (response) => { return(((QueryRoot)response).shop().products()); }, (response) => { mergedResponse = response; } ); Assert.AreEqual(3, responsesToRequestQuery.Count); Assert.AreEqual(null, responsesToRequestQuery[0]); Assert.AreEqual("Product1", responsesToRequestQuery[1].data.shop().products().edges()[0].node().title()); Assert.AreEqual("Product2", responsesToRequestQuery[2].data.shop().products().edges()[0].node().title()); Assert.AreEqual(2, countRequests); Assert.AreEqual(2, mergedResponse.data.shop().products().edges().Count); }