mirror of
https://github.com/vercel/commerce.git
synced 2025-07-22 12:24:18 +00:00
Allow setting a taxon id for getAllProducts
This commit is contained in:
@@ -12,6 +12,7 @@ NEXT_PUBLIC_SPREE_IMAGE_HOST=http://localhost:4000
|
|||||||
NEXT_PUBLIC_SPREE_ALLOWED_IMAGE_DOMAIN=localhost
|
NEXT_PUBLIC_SPREE_ALLOWED_IMAGE_DOMAIN=localhost
|
||||||
NEXT_PUBLIC_SPREE_CATEGORIES_TAXONOMY_PERMALINK=categories
|
NEXT_PUBLIC_SPREE_CATEGORIES_TAXONOMY_PERMALINK=categories
|
||||||
NEXT_PUBLIC_SPREE_BRANDS_TAXONOMY_PERMALINK=brands
|
NEXT_PUBLIC_SPREE_BRANDS_TAXONOMY_PERMALINK=brands
|
||||||
|
NEXT_PUBLIC_SPREE_ALL_PRODUCTS_TAXONOMY_ID=false
|
||||||
NEXT_PUBLIC_SPREE_SHOW_SINGLE_VARIANT_OPTIONS=false
|
NEXT_PUBLIC_SPREE_SHOW_SINGLE_VARIANT_OPTIONS=false
|
||||||
NEXT_PUBLIC_SPREE_LAST_UPDATED_PRODUCTS_PRERENDER_COUNT=10
|
NEXT_PUBLIC_SPREE_LAST_UPDATED_PRODUCTS_PRERENDER_COUNT=10
|
||||||
NEXT_PUBLIC_SPREE_PRODUCT_PLACEHOLDER_IMAGE_URL=/product-img-placeholder.svg
|
NEXT_PUBLIC_SPREE_PRODUCT_PLACEHOLDER_IMAGE_URL=/product-img-placeholder.svg
|
||||||
|
@@ -8,6 +8,7 @@ import type { IProducts } from '@spree/storefront-api-v2-sdk/types/interfaces/Pr
|
|||||||
import type { SpreeApiConfig, SpreeApiProvider } from '../index'
|
import type { SpreeApiConfig, SpreeApiProvider } from '../index'
|
||||||
import type { SpreeSdkVariables } from 'framework/spree/types'
|
import type { SpreeSdkVariables } from 'framework/spree/types'
|
||||||
import normalizeProduct from '../../utils/normalize-product'
|
import normalizeProduct from '../../utils/normalize-product'
|
||||||
|
import { requireConfigValue } from '@framework/isomorphic-config'
|
||||||
|
|
||||||
export default function getAllProductsOperation({
|
export default function getAllProductsOperation({
|
||||||
commerce,
|
commerce,
|
||||||
@@ -41,7 +42,15 @@ export default function getAllProductsOperation({
|
|||||||
userConfig
|
userConfig
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const defaultProductsTaxonomyId = requireConfigValue(
|
||||||
|
'allProductsTaxonomyId'
|
||||||
|
) as string | false
|
||||||
|
|
||||||
const first = getAllProductsVariables.first
|
const first = getAllProductsVariables.first
|
||||||
|
const filter = !defaultProductsTaxonomyId
|
||||||
|
? {}
|
||||||
|
: { filter: { taxons: defaultProductsTaxonomyId } }
|
||||||
|
|
||||||
const variables: SpreeSdkVariables = {
|
const variables: SpreeSdkVariables = {
|
||||||
methodPath: 'products.list',
|
methodPath: 'products.list',
|
||||||
arguments: [
|
arguments: [
|
||||||
@@ -50,6 +59,7 @@ export default function getAllProductsOperation({
|
|||||||
include:
|
include:
|
||||||
'primary_variant,variants,images,option_types,variants.option_values',
|
'primary_variant,variants,images,option_types,variants.option_values',
|
||||||
per_page: first,
|
per_page: first,
|
||||||
|
...filter,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
import forceIsomorphicConfigValues from './utils/force-isomorphic-config-values'
|
import forceIsomorphicConfigValues from './utils/force-isomorphic-config-values'
|
||||||
import requireConfig from './utils/require-config'
|
import requireConfig from './utils/require-config'
|
||||||
|
import validateAllProductsTaxonomyId from './utils/validate-all-products-taxonomy-id'
|
||||||
import validateCookieExpire from './utils/validate-cookie-expire'
|
import validateCookieExpire from './utils/validate-cookie-expire'
|
||||||
import validatePlaceholderImageUrl from './utils/validate-placeholder-image-url'
|
import validatePlaceholderImageUrl from './utils/validate-placeholder-image-url'
|
||||||
import validateProductsPrerenderCount from './utils/validate-products-prerender-count'
|
import validateProductsPrerenderCount from './utils/validate-products-prerender-count'
|
||||||
@@ -16,6 +17,9 @@ const isomorphicConfig = {
|
|||||||
process.env.NEXT_PUBLIC_SPREE_CATEGORIES_TAXONOMY_PERMALINK,
|
process.env.NEXT_PUBLIC_SPREE_CATEGORIES_TAXONOMY_PERMALINK,
|
||||||
brandsTaxonomyPermalink:
|
brandsTaxonomyPermalink:
|
||||||
process.env.NEXT_PUBLIC_SPREE_BRANDS_TAXONOMY_PERMALINK,
|
process.env.NEXT_PUBLIC_SPREE_BRANDS_TAXONOMY_PERMALINK,
|
||||||
|
allProductsTaxonomyId: validateAllProductsTaxonomyId(
|
||||||
|
process.env.NEXT_PUBLIC_SPREE_ALL_PRODUCTS_TAXONOMY_ID
|
||||||
|
),
|
||||||
showSingleVariantOptions:
|
showSingleVariantOptions:
|
||||||
process.env.NEXT_PUBLIC_SPREE_SHOW_SINGLE_VARIANT_OPTIONS === 'true',
|
process.env.NEXT_PUBLIC_SPREE_SHOW_SINGLE_VARIANT_OPTIONS === 'true',
|
||||||
lastUpdatedProductsPrerenderCount: validateProductsPrerenderCount(
|
lastUpdatedProductsPrerenderCount: validateProductsPrerenderCount(
|
||||||
@@ -40,6 +44,7 @@ export default forceIsomorphicConfigValues(
|
|||||||
'imageHost',
|
'imageHost',
|
||||||
'categoriesTaxonomyPermalink',
|
'categoriesTaxonomyPermalink',
|
||||||
'brandsTaxonomyPermalink',
|
'brandsTaxonomyPermalink',
|
||||||
|
'allProductsTaxonomyId',
|
||||||
'showSingleVariantOptions',
|
'showSingleVariantOptions',
|
||||||
'lastUpdatedProductsPrerenderCount',
|
'lastUpdatedProductsPrerenderCount',
|
||||||
'productPlaceholderImageUrl',
|
'productPlaceholderImageUrl',
|
||||||
|
13
framework/spree/utils/validate-all-products-taxonomy-id.ts
Normal file
13
framework/spree/utils/validate-all-products-taxonomy-id.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
const validateAllProductsTaxonomyId = (taxonomyId: unknown): string | false => {
|
||||||
|
if (!taxonomyId || taxonomyId === 'false') {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof taxonomyId === 'string') {
|
||||||
|
return taxonomyId
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new TypeError('taxonomyId must be a string or falsy.')
|
||||||
|
}
|
||||||
|
|
||||||
|
export default validateAllProductsTaxonomyId
|
Reference in New Issue
Block a user