commerce/packages/commercejs/utils/normalize-cart.ts
2022-01-13 20:58:26 -05:00

75 lines
1.5 KiB
TypeScript

import type {
Cart,
LineItem,
CommercejsCart,
CommercejsLineItem,
} from '../types/cart'
type CommercejsLineItemType = CommercejsLineItem & { image: { url: string } }
const normalizeLineItem = (
commercejsLineItem: CommercejsLineItemType
): LineItem => {
const {
id,
sku,
quantity,
price,
product_id,
product_name,
permalink,
variant,
image,
selected_options,
} = commercejsLineItem
return {
id,
variantId: variant?.id ?? '',
productId: product_id,
name: product_name,
quantity,
discounts: [],
path: permalink,
options: selected_options?.map(({ group_name, option_name }) => ({
name: group_name,
value: option_name,
})),
variant: {
id: variant?.id ?? id,
sku: variant?.sku ?? sku,
name: product_name,
requiresShipping: false,
price: variant?.price?.raw ?? price.raw,
listPrice: variant?.price?.raw ?? price.raw,
image: {
url: image?.url,
},
},
}
}
export const normalizeCart = (commercejsCart: CommercejsCart): Cart => {
const {
id,
created,
subtotal: { raw: rawPrice },
currency,
line_items,
} = commercejsCart
return {
id,
createdAt: new Date(created * 1000).toISOString(),
currency: {
code: currency.code,
},
taxesIncluded: false,
lineItems: line_items.map((item) => {
return normalizeLineItem(item as CommercejsLineItemType)
}),
lineItemsSubtotalPrice: rawPrice,
subtotalPrice: rawPrice,
totalPrice: rawPrice,
}
}