forked from crowetic/commerce
42 lines
930 B
TypeScript
42 lines
930 B
TypeScript
function formatPrice({
|
|
amount,
|
|
currencyCode,
|
|
locale,
|
|
}: {
|
|
amount: number
|
|
currencyCode: string
|
|
locale: string
|
|
}) {
|
|
const formatCurrency = new Intl.NumberFormat(locale, {
|
|
style: 'currency',
|
|
currency: currencyCode,
|
|
})
|
|
|
|
return formatCurrency.format(amount)
|
|
}
|
|
|
|
export default function formatVariantPrice({
|
|
listPrice,
|
|
salePrice,
|
|
currencyCode,
|
|
locale,
|
|
}: {
|
|
listPrice: number
|
|
salePrice: number
|
|
currencyCode: string
|
|
locale: string
|
|
}) {
|
|
const hasDiscount = listPrice > salePrice
|
|
const formatDiscount = new Intl.NumberFormat(locale, { style: 'percent' })
|
|
const discount = hasDiscount
|
|
? formatDiscount.format((listPrice - salePrice) / listPrice)
|
|
: null
|
|
|
|
const price = formatPrice({ amount: salePrice, currencyCode, locale })
|
|
const compareAtPrice = hasDiscount
|
|
? formatPrice({ amount: listPrice, currencyCode, locale })
|
|
: null
|
|
|
|
return { price, compareAtPrice, discount }
|
|
}
|