From 1233b918c7fd7c86d3a21c44248ba6b1a938e686 Mon Sep 17 00:00:00 2001 From: Tiago Gimenes Date: Thu, 1 Jul 2021 08:49:08 -0300 Subject: [PATCH 1/5] reduce page size --- packages/gatsby-source-vtex/src/graphql/pagination/product.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby-source-vtex/src/graphql/pagination/product.ts b/packages/gatsby-source-vtex/src/graphql/pagination/product.ts index 23a3591c94..e0f1ff7e3d 100644 --- a/packages/gatsby-source-vtex/src/graphql/pagination/product.ts +++ b/packages/gatsby-source-vtex/src/graphql/pagination/product.ts @@ -11,7 +11,7 @@ interface IPage { // Current max page size supported by VTEX API // TODO: Increasing this number could help on our build times -const PAGE_SIZE = 100 +const PAGE_SIZE = 90 export const ProductPaginationAdapter: IPaginationAdapter = { name: 'ProductPaginationAdapter', From 6a8170957208e31fbed733c67490b61a74153d9d Mon Sep 17 00:00:00 2001 From: Tiago Gimenes Date: Thu, 1 Jul 2021 08:50:02 -0300 Subject: [PATCH 2/5] add min products option --- .../gatsby-source-vtex/src/gatsby-node.ts | 8 +-- .../src/graphql/pagination/product.ts | 63 +++++++++++-------- 2 files changed, 42 insertions(+), 29 deletions(-) diff --git a/packages/gatsby-source-vtex/src/gatsby-node.ts b/packages/gatsby-source-vtex/src/gatsby-node.ts index 7f4c2959a4..2d0fdacb17 100644 --- a/packages/gatsby-source-vtex/src/gatsby-node.ts +++ b/packages/gatsby-source-vtex/src/gatsby-node.ts @@ -60,9 +60,9 @@ export interface Options extends PluginOptions, VTEXOptions { ignorePaths?: string[] concurrency?: number /** - * @description max number of paths for getStaticPaths to generate + * @description minimum number of products to fetch from catalog * */ - maxNumPaths?: number + minProducts?: number } const DEFAULT_PAGE_TYPES_WHITELIST = [ @@ -358,7 +358,7 @@ export const sourceNodes: GatsbyNode['sourceNodes'] = async ( execute: run, gatsbyTypePrefix: `Store`, gatsbyNodeDefs: buildNodeDefinitions({ gatsbyNodeTypes, documents }), - paginationAdapters: [ProductPaginationAdapter], + paginationAdapters: [ProductPaginationAdapter(options)], } // Step5. Add explicit types to gatsby schema @@ -569,5 +569,5 @@ export const pluginOptionsSchema = ({ Joi }: PluginOptionsSchemaArgs) => getStaticPaths: Joi.function().arity(0), getRedirects: Joi.function().arity(0), pageTypes: Joi.array().items(Joi.string()), - maxNumPaths: Joi.number(), + minProducts: Joi.number(), }) diff --git a/packages/gatsby-source-vtex/src/graphql/pagination/product.ts b/packages/gatsby-source-vtex/src/graphql/pagination/product.ts index e0f1ff7e3d..7c2061f561 100644 --- a/packages/gatsby-source-vtex/src/graphql/pagination/product.ts +++ b/packages/gatsby-source-vtex/src/graphql/pagination/product.ts @@ -1,5 +1,9 @@ import type { IPaginationAdapter } from 'gatsby-graphql-source-toolkit' +interface Options { + minProducts?: number +} + // Define pagination adapters interface IProduct { productId: string @@ -13,29 +17,38 @@ interface IPage { // TODO: Increasing this number could help on our build times const PAGE_SIZE = 90 -export const ProductPaginationAdapter: IPaginationAdapter = { - name: 'ProductPaginationAdapter', - expectedVariableNames: [`from`, `to`], - start: () => ({ - // Our search is inclusive, so 0 -> PAGE_SIZE - 1 fetches PAGE_SIZE items - variables: { from: 0, to: PAGE_SIZE - 1 }, - hasNextPage: true, - }), - next: (state, page) => { - const from = Number(state.variables.from) + PAGE_SIZE - const to = Number(state.variables.to) + PAGE_SIZE - - return { - variables: { - from, - to, - }, - // VTEX Search API hard limits us to 2500 products at most - hasNextPage: page.products.length > 0 && to < 2500, - } - }, - concat: (result, page) => ({ - products: result.products.concat(page.products), - }), - getItems: (pageOrResult) => pageOrResult.products, +// VTEX Search API hard limits us to 2500 products at most +// Increasing this hard limit on the API may help us fetching more products +const MAX_PRODUCTS = 2500 + +export const ProductPaginationAdapter = ({ + minProducts = MAX_PRODUCTS, +}: Options): IPaginationAdapter => { + const threshold = Math.min(minProducts, MAX_PRODUCTS) + + return { + name: 'ProductPaginationAdapter', + expectedVariableNames: [`from`, `to`], + start: () => ({ + // Our search is inclusive, so 0 -> PAGE_SIZE - 1 fetches PAGE_SIZE items + variables: { from: 0, to: PAGE_SIZE - 1 }, + hasNextPage: true, + }), + next: (state, page) => { + const from = Number(state.variables.from) + PAGE_SIZE + const to = Number(state.variables.to) + PAGE_SIZE + + return { + variables: { + from, + to, + }, + hasNextPage: page.products.length > 0 && to < threshold, + } + }, + concat: (result, page) => ({ + products: result.products.concat(page.products), + }), + getItems: (pageOrResult) => pageOrResult.products, + } } From 9f3005cc88a462f0e909d4cd3b454187f7d4b115 Mon Sep 17 00:00:00 2001 From: Tiago Gimenes Date: Thu, 1 Jul 2021 09:07:27 -0300 Subject: [PATCH 3/5] Update packages/gatsby-source-vtex/src/graphql/pagination/product.ts Co-authored-by: Emerson Laurentino --- .../gatsby-source-vtex/src/graphql/pagination/product.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/gatsby-source-vtex/src/graphql/pagination/product.ts b/packages/gatsby-source-vtex/src/graphql/pagination/product.ts index 7c2061f561..75628a4749 100644 --- a/packages/gatsby-source-vtex/src/graphql/pagination/product.ts +++ b/packages/gatsby-source-vtex/src/graphql/pagination/product.ts @@ -1,8 +1,5 @@ import type { IPaginationAdapter } from 'gatsby-graphql-source-toolkit' - -interface Options { - minProducts?: number -} +import type { Options } from '../../../gatsby-node' // Define pagination adapters interface IProduct { From 375a1e9bab8b3e38766ca88bdfda87a90d1bec79 Mon Sep 17 00:00:00 2001 From: Tiago Gimenes Date: Thu, 1 Jul 2021 09:11:37 -0300 Subject: [PATCH 4/5] use typings from plugin --- packages/gatsby-source-vtex/src/graphql/pagination/product.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/gatsby-source-vtex/src/graphql/pagination/product.ts b/packages/gatsby-source-vtex/src/graphql/pagination/product.ts index 75628a4749..b8d184b1f8 100644 --- a/packages/gatsby-source-vtex/src/graphql/pagination/product.ts +++ b/packages/gatsby-source-vtex/src/graphql/pagination/product.ts @@ -1,5 +1,6 @@ import type { IPaginationAdapter } from 'gatsby-graphql-source-toolkit' -import type { Options } from '../../../gatsby-node' + +import type { Options } from '../../gatsby-node' // Define pagination adapters interface IProduct { From 19f38f6b512e3fdfdf14387905234c62c65ea2e0 Mon Sep 17 00:00:00 2001 From: Tiago Gimenes Date: Thu, 1 Jul 2021 09:12:29 -0300 Subject: [PATCH 5/5] Update packages/gatsby-source-vtex/src/graphql/pagination/product.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: LarĂ­cia Mota --- packages/gatsby-source-vtex/src/graphql/pagination/product.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby-source-vtex/src/graphql/pagination/product.ts b/packages/gatsby-source-vtex/src/graphql/pagination/product.ts index b8d184b1f8..26d2d41595 100644 --- a/packages/gatsby-source-vtex/src/graphql/pagination/product.ts +++ b/packages/gatsby-source-vtex/src/graphql/pagination/product.ts @@ -16,7 +16,7 @@ interface IPage { const PAGE_SIZE = 90 // VTEX Search API hard limits us to 2500 products at most -// Increasing this hard limit on the API may help us fetching more products +// Increasing this hard limit on the API may help us fetch more products const MAX_PRODUCTS = 2500 export const ProductPaginationAdapter = ({