Supply Spree primary variant if a product has no option variants

This commit is contained in:
tniezg
2021-10-11 15:36:39 +02:00
parent 48dbcf1699
commit 669cc8d06f

View File

@@ -31,19 +31,20 @@ const normalizeProduct = (
spreeSuccessResponse: SpreeSdkResponse,
spreeProduct: ProductAttr
): Product => {
const primaryVariant = jsonApi.findSingleRelationshipDocument<VariantAttr>(
const spreePrimaryVariant =
jsonApi.findSingleRelationshipDocument<VariantAttr>(
spreeSuccessResponse,
spreeProduct,
'primary_variant'
)
if (primaryVariant === null) {
if (spreePrimaryVariant === null) {
throw new MissingPrimaryVariantError(
`Couldn't find primary variant for product with id ${spreeProduct.id}.`
)
}
const sku = primaryVariant.attributes.sku
const sku = spreePrimaryVariant.attributes.sku
const price: ProductPrice = {
value: parseFloat(spreeProduct.attributes.price),
@@ -57,7 +58,6 @@ const normalizeProduct = (
(requireConfigValue('showSingleVariantOptions') as boolean) ||
hasNonMasterVariants
let variants: ProductVariant[]
let options: ExpandedProductOption[] = []
const spreeVariantRecords = jsonApi.findRelationshipDocuments(
@@ -66,7 +66,15 @@ const normalizeProduct = (
'variants'
)
variants = spreeVariantRecords.map((spreeVariantRecord) => {
// Use variants with option values if available. Fall back to
// Spree primary_variant if no explicit variants are present.
const spreeOptionsVariantsOrPrimary =
spreeVariantRecords.length === 0
? [spreePrimaryVariant]
: spreeVariantRecords
const variants: ProductVariant[] = spreeOptionsVariantsOrPrimary.map(
(spreeVariantRecord) => {
let variantOptions: ExpandedProductOption[] = []
if (showOptions) {
@@ -85,7 +93,11 @@ const normalizeProduct = (
variantOptions
)
options = expandOptions(spreeSuccessResponse, spreeOptionValue, options)
options = expandOptions(
spreeSuccessResponse,
spreeOptionValue,
options
)
})
}
@@ -93,11 +105,12 @@ const normalizeProduct = (
id: spreeVariantRecord.id,
options: variantOptions,
}
})
}
)
const spreePrimaryVariantImageRecords = jsonApi.findRelationshipDocuments(
spreeSuccessResponse,
primaryVariant,
spreePrimaryVariant,
'images'
)