mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-29 14:23:43 -05:00
e32b4f0db1
* Handle error cause by `currencyDisplay: 'narrowSymbol'` in old browsers RangeError Value narrowSymbol out of range for Number.prototype.toLocaleString options property currencyDisplay * Make `formatCurrencyLocalized` bulletproof GitOrigin-RevId: 26e8abc6f9fb7c06c2d14b9d86af2d84fb9f32e3
43 lines
745 B
TypeScript
43 lines
745 B
TypeScript
export type CurrencyCode =
|
|
| 'AUD'
|
|
| 'BRL'
|
|
| 'CAD'
|
|
| 'CHF'
|
|
| 'CLP'
|
|
| 'COP'
|
|
| 'DKK'
|
|
| 'EUR'
|
|
| 'GBP'
|
|
| 'INR'
|
|
| 'MXN'
|
|
| 'NOK'
|
|
| 'NZD'
|
|
| 'PEN'
|
|
| 'SEK'
|
|
| 'SGD'
|
|
| 'USD'
|
|
|
|
export function formatCurrencyLocalized(
|
|
amount: number,
|
|
currency: CurrencyCode,
|
|
locale: string,
|
|
stripIfInteger = false
|
|
): string {
|
|
const options: Intl.NumberFormatOptions = { style: 'currency', currency }
|
|
if (stripIfInteger && Number.isInteger(amount)) {
|
|
options.minimumFractionDigits = 0
|
|
}
|
|
|
|
try {
|
|
return amount.toLocaleString(locale, {
|
|
...options,
|
|
currencyDisplay: 'narrowSymbol',
|
|
})
|
|
} catch {}
|
|
|
|
try {
|
|
return amount.toLocaleString(locale, options)
|
|
} catch {}
|
|
|
|
return `${currency} ${amount}`
|
|
}
|