diff --git a/packages/sylius/src/utils/normalize.ts b/packages/sylius/src/utils/normalize.ts index 836daa0f1..489f44f9f 100644 --- a/packages/sylius/src/utils/normalize.ts +++ b/packages/sylius/src/utils/normalize.ts @@ -1,20 +1,26 @@ import { Product, ProductImage, + ProductOption, + ProductOptionValues, ProductPrice, ProductVariant, } from '@vercel/commerce/types/product' import { SyliusProduct, SyliusProductImage, + SyliusProductOption, + SyliusProductOptionValues, SyliusProductVariant, -} from '../types' +} from '../types/products' export const normalizeProduct = (product: SyliusProduct): Product => { return { id: product.id.toString(), name: product.name, - description: product.description, + description: product.shortDescription, + descriptionHtml: product.description, + slug: product.slug, images: product.images.map((image) => normalizeProductImage(image)), variants: product.variants.map((variant) => normalizeProductVariant(variant) @@ -23,20 +29,50 @@ export const normalizeProduct = (product: SyliusProduct): Product => { product.variants[0].price, product.variants[0].originalPrice ), - options: [], + options: product.options.map((option) => normalizeProductOption(option)), } } const normalizeProductVariant = ( variant: SyliusProductVariant ): ProductVariant => { + const options = + variant.optionValues.length > 0 + ? [ + { + id: '', + displayName: '', + values: variant.optionValues.map((optionValue) => + normalizeProductOptionValue(optionValue) + ), + }, + ] + : [] return { id: variant.id, - options: [], + options: options, availableForSale: variant.inStock, } } +const normalizeProductOption = (option: SyliusProductOption): ProductOption => { + return { + id: option.id.toString(), + displayName: option.name, + values: option.values.map((optionValue) => + normalizeProductOptionValue(optionValue) + ), + } +} + +const normalizeProductOptionValue = ( + optionValue: SyliusProductOptionValues +): ProductOptionValues => { + return { + label: optionValue.value ?? '', + } +} + const normalizeProductImage = (image: SyliusProductImage): ProductImage => { return { url: process.env.NEXT_PUBLIC_SYLIUS_ALLOWED_IMAGE_URL + image.path,