From 4147dc701c92ed75234a65d4e4a4bb7c5d034c7e Mon Sep 17 00:00:00 2001 From: Fireb0mb1 Date: Fri, 17 Feb 2023 11:46:34 +0100 Subject: [PATCH 1/4] fix: handle undefined options in number abbrev --- src/hooks/useLocaleFormatter/useLocaleFormatter.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hooks/useLocaleFormatter/useLocaleFormatter.ts b/src/hooks/useLocaleFormatter/useLocaleFormatter.ts index 14a57041d93..f8e2190b00f 100644 --- a/src/hooks/useLocaleFormatter/useLocaleFormatter.ts +++ b/src/hooks/useLocaleFormatter/useLocaleFormatter.ts @@ -187,14 +187,18 @@ export const useLocaleFormatter = (args?: useLocaleFormatterArgs): NumberFormatt minimumFractionDigits, lessThanMin ? 6 : getFiatNumberFractionDigits(number), ) + // Filter out undefined options caused by optional component props so they do not override the defaults + const filteredOptions = options + ? Object.fromEntries(Object.entries(options).filter(([_, value]) => value !== undefined)) + : undefined const formatter = new Intl.NumberFormat(deviceLocale, { notation: number < bounds.min || noDecimals ? 'standard' : 'compact', compactDisplay: fiatType || number < longCompactDisplayLowerBound ? 'short' : 'long', style: fiatType ? 'currency' : 'decimal', currency: fiatType, minimumFractionDigits, - maximumFractionDigits: 10, - ...options, + maximumFractionDigits, + ...filteredOptions, }) const parts = formatter.formatToParts(formatNumber) From dafd75c455f45c0e105ec3fec0102894ef2225e6 Mon Sep 17 00:00:00 2001 From: Fireb0mb1 Date: Fri, 17 Feb 2023 18:35:49 +0100 Subject: [PATCH 2/4] fix: restore large fraction digits before truncate --- src/hooks/useLocaleFormatter/useLocaleFormatter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useLocaleFormatter/useLocaleFormatter.ts b/src/hooks/useLocaleFormatter/useLocaleFormatter.ts index f8e2190b00f..67271e4a99d 100644 --- a/src/hooks/useLocaleFormatter/useLocaleFormatter.ts +++ b/src/hooks/useLocaleFormatter/useLocaleFormatter.ts @@ -197,7 +197,7 @@ export const useLocaleFormatter = (args?: useLocaleFormatterArgs): NumberFormatt style: fiatType ? 'currency' : 'decimal', currency: fiatType, minimumFractionDigits, - maximumFractionDigits, + maximumFractionDigits: 10, ...filteredOptions, }) From 86eb84c55f0cb9abfb2baf3ccfe72aa0d4773070 Mon Sep 17 00:00:00 2001 From: Fireb0mb1 Date: Fri, 17 Feb 2023 18:52:37 +0100 Subject: [PATCH 3/4] fix: comment on fraction digits before truncate --- src/hooks/useLocaleFormatter/useLocaleFormatter.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hooks/useLocaleFormatter/useLocaleFormatter.ts b/src/hooks/useLocaleFormatter/useLocaleFormatter.ts index 67271e4a99d..e7c88c20c3f 100644 --- a/src/hooks/useLocaleFormatter/useLocaleFormatter.ts +++ b/src/hooks/useLocaleFormatter/useLocaleFormatter.ts @@ -197,6 +197,7 @@ export const useLocaleFormatter = (args?: useLocaleFormatterArgs): NumberFormatt style: fiatType ? 'currency' : 'decimal', currency: fiatType, minimumFractionDigits, + // Force enough fractional digits to truncate it properly without rounding off below maximumFractionDigits: 10, ...filteredOptions, }) From ed0caf200ffb86facbc4246291751f616f3f7b94 Mon Sep 17 00:00:00 2001 From: Fireb0mb1 Date: Fri, 24 Feb 2023 00:32:49 +0100 Subject: [PATCH 4/4] fix: handle empty options without undef --- src/hooks/useLocaleFormatter/useLocaleFormatter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useLocaleFormatter/useLocaleFormatter.ts b/src/hooks/useLocaleFormatter/useLocaleFormatter.ts index e7c88c20c3f..ab3e8b2d9f9 100644 --- a/src/hooks/useLocaleFormatter/useLocaleFormatter.ts +++ b/src/hooks/useLocaleFormatter/useLocaleFormatter.ts @@ -190,7 +190,7 @@ export const useLocaleFormatter = (args?: useLocaleFormatterArgs): NumberFormatt // Filter out undefined options caused by optional component props so they do not override the defaults const filteredOptions = options ? Object.fromEntries(Object.entries(options).filter(([_, value]) => value !== undefined)) - : undefined + : {} const formatter = new Intl.NumberFormat(deviceLocale, { notation: number < bounds.min || noDecimals ? 'standard' : 'compact', compactDisplay: fiatType || number < longCompactDisplayLowerBound ? 'short' : 'long',