From 528831314007e270cef01cf0a06d47d464119129 Mon Sep 17 00:00:00 2001 From: tniezg Date: Mon, 11 Oct 2021 16:07:28 +0200 Subject: [PATCH] Do not throw an error if a product doesn't have NEXT_PUBLIC_SPREE_IMAGES_OPTION_FILTER --- .../spree/errors/MissingOptionTypeError.ts | 1 - framework/spree/utils/normalize-product.ts | 92 ++++++++++--------- 2 files changed, 47 insertions(+), 46 deletions(-) delete mode 100644 framework/spree/errors/MissingOptionTypeError.ts diff --git a/framework/spree/errors/MissingOptionTypeError.ts b/framework/spree/errors/MissingOptionTypeError.ts deleted file mode 100644 index 14c51aeca..000000000 --- a/framework/spree/errors/MissingOptionTypeError.ts +++ /dev/null @@ -1 +0,0 @@ -export default class MissingOptionTypeError extends Error {} diff --git a/framework/spree/utils/normalize-product.ts b/framework/spree/utils/normalize-product.ts index f39e92ab2..6da2b6f0a 100644 --- a/framework/spree/utils/normalize-product.ts +++ b/framework/spree/utils/normalize-product.ts @@ -12,7 +12,6 @@ import expandOptions from './expand-options' import getMediaGallery from './get-media-gallery' import getProductPath from './get-product-path' import MissingPrimaryVariantError from '../errors/MissingPrimaryVariantError' -import MissingOptionTypeError from '../errors/MissingOptionTypeError' import MissingOptionValueError from '../errors/MissingOptionValueError' import type { SpreeSdkResponse, VariantAttr } from '@framework/types' import { jsonApi } from '@spree/storefront-api-v2-sdk' @@ -143,59 +142,62 @@ const normalizeProduct = ( ) if (!imagesFilterOptionType) { - throw new MissingOptionTypeError( - `Couldn't find option type having name ${imagesOptionFilter}.` + console.warn( + `Couldn't find option type having name ${imagesOptionFilter} for product with id ${spreeProduct.id}.` + + ' Showing no images for this product.' ) - } - const imagesOptionTypeFilterId = imagesFilterOptionType.id - const includedOptionValuesImagesIds: string[] = [] + spreeVariantImageRecords = [] + } else { + const imagesOptionTypeFilterId = imagesFilterOptionType.id + const includedOptionValuesImagesIds: string[] = [] - spreeVariantImageRecords = spreeVariantRecords.reduce( - (accumulatedImageRecords, spreeVariantRecord) => { - const spreeVariantOptionValuesIdentifiers: RelationType[] = - spreeVariantRecord.relationships.option_values.data + spreeVariantImageRecords = spreeVariantRecords.reduce( + (accumulatedImageRecords, spreeVariantRecord) => { + const spreeVariantOptionValuesIdentifiers: RelationType[] = + spreeVariantRecord.relationships.option_values.data - const spreeOptionValueOfFilterTypeIdentifier = - spreeVariantOptionValuesIdentifiers.find( - (spreeVariantOptionValuesIdentifier: RelationType) => - imagesFilterOptionType.relationships.option_values.data.some( - (filterOptionTypeValueIdentifier: RelationType) => - filterOptionTypeValueIdentifier.id === - spreeVariantOptionValuesIdentifier.id - ) - ) + const spreeOptionValueOfFilterTypeIdentifier = + spreeVariantOptionValuesIdentifiers.find( + (spreeVariantOptionValuesIdentifier: RelationType) => + imagesFilterOptionType.relationships.option_values.data.some( + (filterOptionTypeValueIdentifier: RelationType) => + filterOptionTypeValueIdentifier.id === + spreeVariantOptionValuesIdentifier.id + ) + ) - if (!spreeOptionValueOfFilterTypeIdentifier) { - throw new MissingOptionValueError( - `Couldn't find option value related to option type with id ${imagesOptionTypeFilterId}.` - ) - } + if (!spreeOptionValueOfFilterTypeIdentifier) { + throw new MissingOptionValueError( + `Couldn't find option value related to option type with id ${imagesOptionTypeFilterId}.` + ) + } - const optionValueImagesAlreadyIncluded = - includedOptionValuesImagesIds.includes( + const optionValueImagesAlreadyIncluded = + includedOptionValuesImagesIds.includes( + spreeOptionValueOfFilterTypeIdentifier.id + ) + + if (optionValueImagesAlreadyIncluded) { + return accumulatedImageRecords + } + + includedOptionValuesImagesIds.push( spreeOptionValueOfFilterTypeIdentifier.id ) - if (optionValueImagesAlreadyIncluded) { - return accumulatedImageRecords - } - - includedOptionValuesImagesIds.push( - spreeOptionValueOfFilterTypeIdentifier.id - ) - - return [ - ...accumulatedImageRecords, - ...jsonApi.findRelationshipDocuments( - spreeSuccessResponse, - spreeVariantRecord, - 'images' - ), - ] - }, - [] - ) + return [ + ...accumulatedImageRecords, + ...jsonApi.findRelationshipDocuments( + spreeSuccessResponse, + spreeVariantRecord, + 'images' + ), + ] + }, + [] + ) + } } const spreeImageRecords = [