[web] Handle error cause by currencyDisplay: 'narrowSymbol' in old browsers (#18060)

* 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
This commit is contained in:
Antoine Clausse 2024-04-25 13:44:05 +02:00 committed by Copybot
parent 65313e6692
commit e32b4f0db1
2 changed files with 26 additions and 18 deletions

View file

@ -14,19 +14,23 @@
* @returns {string}
*/
function formatCurrencyLocalized(amount, currency, locale, stripIfInteger) {
const options = { style: 'currency', currency }
if (stripIfInteger && Number.isInteger(amount)) {
return amount.toLocaleString(locale, {
style: 'currency',
currency,
minimumFractionDigits: 0,
currencyDisplay: 'narrowSymbol',
})
options.minimumFractionDigits = 0
}
try {
return amount.toLocaleString(locale, {
style: 'currency',
currency,
...options,
currencyDisplay: 'narrowSymbol',
})
} catch {}
try {
return amount.toLocaleString(locale, options)
} catch {}
return `${currency} ${amount}`
}
module.exports = {

View file

@ -23,17 +23,21 @@ export function formatCurrencyLocalized(
locale: string,
stripIfInteger = false
): string {
const options: Intl.NumberFormatOptions = { style: 'currency', currency }
if (stripIfInteger && Number.isInteger(amount)) {
return amount.toLocaleString(locale, {
style: 'currency',
currency,
minimumFractionDigits: 0,
currencyDisplay: 'narrowSymbol',
})
options.minimumFractionDigits = 0
}
try {
return amount.toLocaleString(locale, {
style: 'currency',
currency,
...options,
currencyDisplay: 'narrowSymbol',
})
} catch {}
try {
return amount.toLocaleString(locale, options)
} catch {}
return `${currency} ${amount}`
}