80 lines
2.0 KiB
TypeScript
Vendored
80 lines
2.0 KiB
TypeScript
Vendored
import { DEFAULT_DISCOUNT_RATE } from '../constants'
|
|
|
|
// ============================================================================
|
|
// Wallet-specific Formatting Functions
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Format Creem price with currency symbol (USD/EUR)
|
|
*/
|
|
export function formatCreemPrice(
|
|
price: number,
|
|
currency: 'USD' | 'EUR'
|
|
): string {
|
|
const symbol = currency === 'EUR' ? '€' : '$'
|
|
return `${symbol}${price.toFixed(2)}`
|
|
}
|
|
|
|
/**
|
|
* Format large quota numbers with K/M suffix
|
|
*/
|
|
export function formatQuotaShort(quota: number): string {
|
|
if (quota >= 1000000) {
|
|
return `${(quota / 1000000).toFixed(1)}M`
|
|
}
|
|
if (quota >= 1000) {
|
|
return `${(quota / 1000).toFixed(1)}K`
|
|
}
|
|
return quota.toString()
|
|
}
|
|
|
|
/**
|
|
* Format currency amount that is already in local currency.
|
|
* This is used for payment amounts that have been calculated via priceRatio.
|
|
*/
|
|
export function formatCurrency(amount: number | string): string {
|
|
const numeric =
|
|
typeof amount === 'number' ? amount : Number.parseFloat(String(amount))
|
|
if (!Number.isFinite(numeric)) return '-'
|
|
|
|
return new Intl.NumberFormat(undefined, {
|
|
minimumFractionDigits: 0,
|
|
maximumFractionDigits: Math.abs(numeric) >= 1 ? 2 : 4,
|
|
}).format(numeric)
|
|
}
|
|
|
|
/**
|
|
* Get discount label for display (e.g., "20% OFF")
|
|
*/
|
|
export function getDiscountLabel(discount: number): string {
|
|
if (discount >= DEFAULT_DISCOUNT_RATE) {
|
|
return ''
|
|
}
|
|
const off = Math.round((1 - discount) * 100)
|
|
return `${off}% OFF`
|
|
}
|
|
|
|
/**
|
|
* Calculate pricing details for a preset amount
|
|
*/
|
|
export function calculatePresetPricing(
|
|
presetValue: number,
|
|
priceRatio: number,
|
|
discount: number,
|
|
usdExchangeRate: number = 1
|
|
) {
|
|
const originalPrice = presetValue * priceRatio
|
|
const actualPrice = originalPrice * discount
|
|
const savedAmount = originalPrice - actualPrice
|
|
const hasDiscount = discount < 1.0
|
|
const displayValue = presetValue * usdExchangeRate
|
|
|
|
return {
|
|
displayValue,
|
|
originalPrice,
|
|
actualPrice,
|
|
savedAmount,
|
|
hasDiscount,
|
|
}
|
|
}
|