Moved normalizer to BC function

This commit is contained in:
Belen Curcio 2021-01-07 16:58:58 -03:00
parent 4499f33f13
commit 27dd4bfb69
2 changed files with 41 additions and 44 deletions

View File

@ -8,6 +8,43 @@ import setProductLocaleMeta from '../utils/set-product-locale-meta'
import { productConnectionFragment } from '../fragments/product'
import { BigcommerceConfig, getConfig } from '..'
function productsNormalizer(arr: any[]): Product[] {
// Normalizes products arr response and flattens node edges
return arr.map(
({
node: {
entityId: id,
images,
variants,
productOptions,
prices,
path,
...rest
},
}) => ({
id,
path,
slug: path.slice(1, -1),
images: images.edges.map(
({ node: { urlOriginal, altText, ...rest } }: any) => ({
url: urlOriginal,
alt: altText,
...rest,
})
),
variants: variants.edges.map(({ node }: any) => node),
productOptions: productOptions.edges.map(({ node }: any) => node),
prices: [
{
value: prices.price.value,
currencyCode: prices.price.currencyCode,
},
],
...rest,
})
)
}
export const getAllProductsQuery = /* GraphQL */ `
query getAllProducts(
$hasLocale: Boolean = false
@ -72,7 +109,7 @@ async function getAllProducts(opts?: {
variables?: ProductVariables
config?: BigcommerceConfig
preview?: boolean
}): Promise<GetAllProductsResult>
}): Promise<{ products: Product[] }>
async function getAllProducts<
T extends Record<keyof GetAllProductsResult, any[]>,
@ -93,7 +130,7 @@ async function getAllProducts({
variables?: ProductVariables
config?: BigcommerceConfig
preview?: boolean
} = {}): Promise<GetAllProductsResult> {
} = {}): Promise<{ products: Product[] }> {
config = getConfig(config)
const locale = vars.locale || config.locale
@ -126,7 +163,7 @@ async function getAllProducts({
})
}
return { products }
return { products: productsNormalizer(products) }
}
export default getAllProducts

View File

@ -11,44 +11,6 @@ import getSiteInfo from '@framework/api/operations/get-site-info'
import getAllPages from '@framework/api/operations/get-all-pages'
// Outputs from providers should already be normalized
// TODO (bc) move this to the provider
function productsNormalizer(arr: any[]) {
// Normalizes products arr response and flattens node edges
return arr.map(
({
node: {
entityId: id,
images,
variants,
productOptions,
prices,
path,
...rest
},
}) => ({
id,
path,
slug: path.slice(1, -1),
images: images.edges.map(
({ node: { urlOriginal, altText, ...rest } }: any) => ({
url: urlOriginal,
alt: altText,
...rest,
})
),
variants: variants.edges.map(({ node }: any) => node),
productOptions: productOptions.edges.map(({ node }: any) => node),
prices: [
{
value: prices.price.value,
currencyCode: prices.price.currencyCode,
},
],
...rest,
})
)
}
export async function getStaticProps({
preview,
@ -56,14 +18,12 @@ export async function getStaticProps({
}: GetStaticPropsContext) {
const config = getConfig({ locale })
const { products: rawProducts } = await getAllProducts({
const { products } = await getAllProducts({
variables: { first: 12 },
config,
preview,
})
// Remove normalizer and send to framework provider.
const products = productsNormalizer(rawProducts)
const { categories, brands } = await getSiteInfo({ config, preview })
const { pages } = await getAllPages({ config, preview })