50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
/**
|
|
* Toolkit - Currency Formatting
|
|
*
|
|
* Simple currency formatting. Currency code comes from user's WHMCS profile.
|
|
* Typically JPY for this application.
|
|
*/
|
|
|
|
export type SupportedCurrency = "JPY" | "USD" | "EUR";
|
|
|
|
/**
|
|
* Format a number as currency using WHMCS currency data
|
|
*
|
|
* @param amount - The numeric amount to format
|
|
* @param currencyCode - Currency code from WHMCS API (e.g., "JPY", "USD", "EUR")
|
|
* @param currencyPrefix - Currency symbol from WHMCS API (e.g., "¥", "$", "€")
|
|
*
|
|
* @example
|
|
* formatCurrency(1000, "JPY", "¥") // ¥1,000
|
|
* formatCurrency(1000, "USD", "$") // $1,000.00
|
|
* formatCurrency(1000, "EUR", "€") // €1,000.00
|
|
*/
|
|
export function formatCurrency(
|
|
amount: number,
|
|
currencyCode: string,
|
|
currencyPrefix: string
|
|
): string {
|
|
// Determine fraction digits based on currency
|
|
const fractionDigits = currencyCode === "JPY" ? 0 : 2;
|
|
|
|
// Format the number with appropriate decimal places
|
|
const formattedAmount = amount.toLocaleString("en-US", {
|
|
minimumFractionDigits: fractionDigits,
|
|
maximumFractionDigits: fractionDigits,
|
|
});
|
|
|
|
// Add currency prefix
|
|
return `${currencyPrefix}${formattedAmount}`;
|
|
}
|
|
|
|
/**
|
|
* Parse a currency string to a number
|
|
*/
|
|
export function parseCurrency(value: string): number | null {
|
|
// Remove currency symbols, commas, and whitespace
|
|
const cleaned = value.replace(/[¥$€,\s]/g, "");
|
|
const parsed = Number.parseFloat(cleaned);
|
|
return Number.isFinite(parsed) ? parsed : null;
|
|
}
|
|
|