diff --git a/packages/sylius/src/utils/index.ts b/packages/sylius/src/utils/index.ts index 9084ed598..385582b60 100644 --- a/packages/sylius/src/utils/index.ts +++ b/packages/sylius/src/utils/index.ts @@ -1,4 +1,5 @@ export { default as handleFetchResponse } from './handle-fetch-response' +export * from './normalize' /* export { default as getSearchVariables } from './get-search-variables' @@ -13,6 +14,5 @@ export { default as handleAccountActivation } from './handle-account-activation' export { default as throwUserErrors } from './throw-user-errors' export * from './queries' export * from './mutations' -export * from './normalize' export * from './customer-token' */ diff --git a/packages/sylius/src/utils/normalize.ts b/packages/sylius/src/utils/normalize.ts new file mode 100644 index 000000000..836daa0f1 --- /dev/null +++ b/packages/sylius/src/utils/normalize.ts @@ -0,0 +1,55 @@ +import { + Product, + ProductImage, + ProductPrice, + ProductVariant, +} from '@vercel/commerce/types/product' +import { + SyliusProduct, + SyliusProductImage, + SyliusProductVariant, +} from '../types' + +export const normalizeProduct = (product: SyliusProduct): Product => { + return { + id: product.id.toString(), + name: product.name, + description: product.description, + images: product.images.map((image) => normalizeProductImage(image)), + variants: product.variants.map((variant) => + normalizeProductVariant(variant) + ), + price: normalizeProductPrice( + product.variants[0].price, + product.variants[0].originalPrice + ), + options: [], + } +} + +const normalizeProductVariant = ( + variant: SyliusProductVariant +): ProductVariant => { + return { + id: variant.id, + options: [], + availableForSale: variant.inStock, + } +} + +const normalizeProductImage = (image: SyliusProductImage): ProductImage => { + return { + url: process.env.NEXT_PUBLIC_SYLIUS_ALLOWED_IMAGE_URL + image.path, + } +} + +const normalizeProductPrice = ( + price: number, + originalPrice: number +): ProductPrice => { + return { + value: originalPrice / 100, + salePrice: price / 100, + currencyCode: 'EUR', + } +}