mirror of
https://github.com/vercel/commerce.git
synced 2025-07-23 04:36:49 +00:00
Merge pull request #5 from spree/fix-images-option-filter
Do not throw an error if a product doesn't have NEXT_PUBLIC_SPREE_IMAGES_OPTION_FILTER
This commit is contained in:
@@ -1 +0,0 @@
|
|||||||
export default class MissingOptionTypeError extends Error {}
|
|
@@ -12,7 +12,6 @@ import expandOptions from './expand-options'
|
|||||||
import getMediaGallery from './get-media-gallery'
|
import getMediaGallery from './get-media-gallery'
|
||||||
import getProductPath from './get-product-path'
|
import getProductPath from './get-product-path'
|
||||||
import MissingPrimaryVariantError from '../errors/MissingPrimaryVariantError'
|
import MissingPrimaryVariantError from '../errors/MissingPrimaryVariantError'
|
||||||
import MissingOptionTypeError from '../errors/MissingOptionTypeError'
|
|
||||||
import MissingOptionValueError from '../errors/MissingOptionValueError'
|
import MissingOptionValueError from '../errors/MissingOptionValueError'
|
||||||
import type { SpreeSdkResponse, VariantAttr } from '@framework/types'
|
import type { SpreeSdkResponse, VariantAttr } from '@framework/types'
|
||||||
import { jsonApi } from '@spree/storefront-api-v2-sdk'
|
import { jsonApi } from '@spree/storefront-api-v2-sdk'
|
||||||
@@ -143,59 +142,62 @@ const normalizeProduct = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (!imagesFilterOptionType) {
|
if (!imagesFilterOptionType) {
|
||||||
throw new MissingOptionTypeError(
|
console.warn(
|
||||||
`Couldn't find option type having name ${imagesOptionFilter}.`
|
`Couldn't find option type having name ${imagesOptionFilter} for product with id ${spreeProduct.id}.` +
|
||||||
|
' Showing no images for this product.'
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
const imagesOptionTypeFilterId = imagesFilterOptionType.id
|
spreeVariantImageRecords = []
|
||||||
const includedOptionValuesImagesIds: string[] = []
|
} else {
|
||||||
|
const imagesOptionTypeFilterId = imagesFilterOptionType.id
|
||||||
|
const includedOptionValuesImagesIds: string[] = []
|
||||||
|
|
||||||
spreeVariantImageRecords = spreeVariantRecords.reduce<JsonApiDocument[]>(
|
spreeVariantImageRecords = spreeVariantRecords.reduce<JsonApiDocument[]>(
|
||||||
(accumulatedImageRecords, spreeVariantRecord) => {
|
(accumulatedImageRecords, spreeVariantRecord) => {
|
||||||
const spreeVariantOptionValuesIdentifiers: RelationType[] =
|
const spreeVariantOptionValuesIdentifiers: RelationType[] =
|
||||||
spreeVariantRecord.relationships.option_values.data
|
spreeVariantRecord.relationships.option_values.data
|
||||||
|
|
||||||
const spreeOptionValueOfFilterTypeIdentifier =
|
const spreeOptionValueOfFilterTypeIdentifier =
|
||||||
spreeVariantOptionValuesIdentifiers.find(
|
spreeVariantOptionValuesIdentifiers.find(
|
||||||
(spreeVariantOptionValuesIdentifier: RelationType) =>
|
(spreeVariantOptionValuesIdentifier: RelationType) =>
|
||||||
imagesFilterOptionType.relationships.option_values.data.some(
|
imagesFilterOptionType.relationships.option_values.data.some(
|
||||||
(filterOptionTypeValueIdentifier: RelationType) =>
|
(filterOptionTypeValueIdentifier: RelationType) =>
|
||||||
filterOptionTypeValueIdentifier.id ===
|
filterOptionTypeValueIdentifier.id ===
|
||||||
spreeVariantOptionValuesIdentifier.id
|
spreeVariantOptionValuesIdentifier.id
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!spreeOptionValueOfFilterTypeIdentifier) {
|
if (!spreeOptionValueOfFilterTypeIdentifier) {
|
||||||
throw new MissingOptionValueError(
|
throw new MissingOptionValueError(
|
||||||
`Couldn't find option value related to option type with id ${imagesOptionTypeFilterId}.`
|
`Couldn't find option value related to option type with id ${imagesOptionTypeFilterId}.`
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const optionValueImagesAlreadyIncluded =
|
const optionValueImagesAlreadyIncluded =
|
||||||
includedOptionValuesImagesIds.includes(
|
includedOptionValuesImagesIds.includes(
|
||||||
|
spreeOptionValueOfFilterTypeIdentifier.id
|
||||||
|
)
|
||||||
|
|
||||||
|
if (optionValueImagesAlreadyIncluded) {
|
||||||
|
return accumulatedImageRecords
|
||||||
|
}
|
||||||
|
|
||||||
|
includedOptionValuesImagesIds.push(
|
||||||
spreeOptionValueOfFilterTypeIdentifier.id
|
spreeOptionValueOfFilterTypeIdentifier.id
|
||||||
)
|
)
|
||||||
|
|
||||||
if (optionValueImagesAlreadyIncluded) {
|
return [
|
||||||
return accumulatedImageRecords
|
...accumulatedImageRecords,
|
||||||
}
|
...jsonApi.findRelationshipDocuments(
|
||||||
|
spreeSuccessResponse,
|
||||||
includedOptionValuesImagesIds.push(
|
spreeVariantRecord,
|
||||||
spreeOptionValueOfFilterTypeIdentifier.id
|
'images'
|
||||||
)
|
),
|
||||||
|
]
|
||||||
return [
|
},
|
||||||
...accumulatedImageRecords,
|
[]
|
||||||
...jsonApi.findRelationshipDocuments(
|
)
|
||||||
spreeSuccessResponse,
|
}
|
||||||
spreeVariantRecord,
|
|
||||||
'images'
|
|
||||||
),
|
|
||||||
]
|
|
||||||
},
|
|
||||||
[]
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const spreeImageRecords = [
|
const spreeImageRecords = [
|
||||||
|
Reference in New Issue
Block a user