예제 #1
0
        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);
                }
            }
                );
        }
예제 #2
0
        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);
        }