From ec3475d8346d781cc00939e7116fb6dfd4c4bd4f Mon Sep 17 00:00:00 2001 From: Julian Wachholz <julian@wachholz.ch> Date: Tue, 9 Jul 2024 19:02:40 +0200 Subject: [PATCH] Fix number formatting with non-breaking space (#2981) --- packages/loot-core/src/shared/arithmetic.test.ts | 4 ++++ packages/loot-core/src/shared/arithmetic.ts | 2 +- packages/loot-core/src/shared/util.test.ts | 11 ----------- packages/loot-core/src/shared/util.ts | 16 ++-------------- upcoming-release-notes/2981.md | 6 ++++++ 5 files changed, 13 insertions(+), 26 deletions(-) create mode 100644 upcoming-release-notes/2981.md diff --git a/packages/loot-core/src/shared/arithmetic.test.ts b/packages/loot-core/src/shared/arithmetic.test.ts index 0475689b8..b897545dc 100644 --- a/packages/loot-core/src/shared/arithmetic.test.ts +++ b/packages/loot-core/src/shared/arithmetic.test.ts @@ -1,4 +1,5 @@ import { evalArithmetic } from './arithmetic'; +import { setNumberFormat } from './util'; describe('arithmetic', () => { test('handles negative numbers', () => { @@ -40,5 +41,8 @@ describe('arithmetic', () => { test('respects current number format', () => { expect(evalArithmetic('1,222.45')).toEqual(1222.45); + + setNumberFormat({ format: 'space-comma', hideFraction: false }); + expect(evalArithmetic('1\xa0222,45')).toEqual(1222.45); }); }); diff --git a/packages/loot-core/src/shared/arithmetic.ts b/packages/loot-core/src/shared/arithmetic.ts index f69543b1d..bd4d26df8 100644 --- a/packages/loot-core/src/shared/arithmetic.ts +++ b/packages/loot-core/src/shared/arithmetic.ts @@ -38,7 +38,7 @@ function parsePrimary(state) { } let numberStr = ''; - while (char(state) && char(state).match(/[0-9,. ]|\p{Sc}/u)) { + while (char(state) && char(state).match(/[0-9,.\xa0 ]|\p{Sc}/u)) { numberStr += next(state); } diff --git a/packages/loot-core/src/shared/util.test.ts b/packages/loot-core/src/shared/util.test.ts index 6d1945b29..ac2f2b70a 100644 --- a/packages/loot-core/src/shared/util.test.ts +++ b/packages/loot-core/src/shared/util.test.ts @@ -84,15 +84,4 @@ describe('utility functions', () => { formatter = getNumberFormat().formatter; expect(formatter.format(Number('1234.56'))).toBe('1\xa0235'); }); - - test('number formatting works with space-dot format', () => { - setNumberFormat({ format: 'space-dot', hideFraction: false }); - let formatter = getNumberFormat().formatter; - // grouping separator space char is a non-breaking space, or UTF-16 \xa0 - expect(formatter.format(Number('1234.56'))).toBe('1\xa0234.56'); - - setNumberFormat({ format: 'space-dot', hideFraction: true }); - formatter = getNumberFormat().formatter; - expect(formatter.format(Number('1234.56'))).toBe('1\xa0235'); - }); }); diff --git a/packages/loot-core/src/shared/util.ts b/packages/loot-core/src/shared/util.ts index 460217745..cac3ff0bb 100644 --- a/packages/loot-core/src/shared/util.ts +++ b/packages/loot-core/src/shared/util.ts @@ -217,12 +217,7 @@ export function appendDecimals( return amountToCurrency(currencyToAmount(result)); } -type NumberFormats = - | 'comma-dot' - | 'dot-comma' - | 'space-comma' - | 'space-dot' - | 'comma-dot-in'; +type NumberFormats = 'comma-dot' | 'dot-comma' | 'space-comma' | 'comma-dot-in'; export const numberFormats: Array<{ value: NumberFormats; @@ -231,8 +226,7 @@ export const numberFormats: Array<{ }> = [ { value: 'comma-dot', label: '1,000.33', labelNoFraction: '1,000' }, { value: 'dot-comma', label: '1.000,33', labelNoFraction: '1.000' }, - { value: 'space-comma', label: '1 000,33', labelNoFraction: '1 000' }, - { value: 'space-dot', label: '1 000.33', labelNoFraction: '1 000' }, + { value: 'space-comma', label: '1\xa0000,33', labelNoFraction: '1\xa0000' }, { value: 'comma-dot-in', label: '1,00,000.33', labelNoFraction: '1,00,000' }, ]; @@ -269,12 +263,6 @@ export function getNumberFormat({ regex = /[^-0-9,]/g; separator = ','; break; - case 'space-dot': - locale = 'dje'; - regex = /[^-0-9,.]/g; - separator = '.'; - separatorRegex = /[,.]/g; - break; case 'comma-dot-in': locale = 'en-IN'; regex = /[^-0-9.]/g; diff --git a/upcoming-release-notes/2981.md b/upcoming-release-notes/2981.md new file mode 100644 index 000000000..6c1a2fb48 --- /dev/null +++ b/upcoming-release-notes/2981.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [julianwachholz] +--- + +Fix number parsing with and remove unsupported "space-dot" format -- GitLab