Save primary variant's SKU when normalizing a product from Spree

This commit is contained in:
tniezg 2021-08-24 15:45:32 +02:00
parent c3bd932d69
commit d98a75503d
4 changed files with 25 additions and 4 deletions

View File

@ -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,
},
],

View File

@ -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',
},
],
}

View File

@ -48,7 +48,8 @@ export const handler: SWRHook<SearchProductsHook> = {
arguments: [
{},
{
include: 'variants,images,option_types,variants.option_values',
include:
'primary_variant,variants,images,option_types,variants.option_values',
per_page: 50,
...filter,
...sort,

View File

@ -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,
}
}