From d98a75503d02a8ca62cabb3efa3d21861779b958 Mon Sep 17 00:00:00 2001 From: tniezg Date: Tue, 24 Aug 2021 15:45:32 +0200 Subject: [PATCH] Save primary variant's SKU when normalizing a product from Spree --- .../spree/api/operations/get-all-products.ts | 3 ++- framework/spree/api/operations/get-product.ts | 3 ++- framework/spree/product/use-search.tsx | 3 ++- framework/spree/utils/normalize-product.ts | 20 ++++++++++++++++++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/framework/spree/api/operations/get-all-products.ts b/framework/spree/api/operations/get-all-products.ts index 5ad76cad1..3d03a6276 100644 --- a/framework/spree/api/operations/get-all-products.ts +++ b/framework/spree/api/operations/get-all-products.ts @@ -47,7 +47,8 @@ export default function getAllProductsOperation({ arguments: [ {}, { - include: 'variants,images,option_types,variants.option_values', + include: + 'primary_variant,variants,images,option_types,variants.option_values', per_page: first, }, ], diff --git a/framework/spree/api/operations/get-product.ts b/framework/spree/api/operations/get-product.ts index 57d43a8f0..a88ac479e 100644 --- a/framework/spree/api/operations/get-product.ts +++ b/framework/spree/api/operations/get-product.ts @@ -54,7 +54,8 @@ export default function getProductOperation({ getProductVariables.slug, {}, { - include: 'variants,images,option_types,variants.option_values', + include: + 'primary_variant,variants,images,option_types,variants.option_values', }, ], } diff --git a/framework/spree/product/use-search.tsx b/framework/spree/product/use-search.tsx index 7411d7363..d261b6add 100644 --- a/framework/spree/product/use-search.tsx +++ b/framework/spree/product/use-search.tsx @@ -48,7 +48,8 @@ export const handler: SWRHook = { arguments: [ {}, { - include: 'variants,images,option_types,variants.option_values', + include: + 'primary_variant,variants,images,option_types,variants.option_values', per_page: 50, ...filter, ...sort, diff --git a/framework/spree/utils/normalize-product.ts b/framework/spree/utils/normalize-product.ts index 83234e566..d390e8d9a 100644 --- a/framework/spree/utils/normalize-product.ts +++ b/framework/spree/utils/normalize-product.ts @@ -14,13 +14,30 @@ import { requireConfigValue } from '@framework/isomorphic-config' import createGetAbsoluteImageUrl from './create-get-absolute-image-url' import expandOptions from './expand-options' import getMediaGallery from './get-media-gallery' -import { findIncludedOfType } from './find-json-api-documents' +import { findIncluded, findIncludedOfType } from './find-json-api-documents' import getProductPath from './get-product-path' +import MissingPrimaryVariantError from '@framework/errors/MissingPrimaryVariantError' const normalizeProduct = ( spreeSuccessResponse: JsonApiSingleResponse | JsonApiListResponse, spreeProduct: ProductAttr ): Product => { + const primaryVariantIdentifier = spreeProduct.relationships.primary_variant + .data as RelationType + const primaryVariant = findIncluded( + spreeSuccessResponse, + primaryVariantIdentifier.type, + primaryVariantIdentifier.id + ) + + if (primaryVariant === null) { + throw new MissingPrimaryVariantError( + `Couldn't find primary variant with id ${primaryVariantIdentifier.id}.` + ) + } + + const sku = primaryVariant.attributes.sku + const spreeImageRecords = findIncludedOfType( spreeSuccessResponse, spreeProduct, @@ -95,6 +112,7 @@ const normalizeProduct = ( price, slug, path, + sku, } }