refactor: currency-formatter -> Intl.NumberFormat
This commit is contained in:
parent
2c9ecee464
commit
3273b2723d
6 changed files with 29 additions and 35 deletions
|
@ -43,7 +43,6 @@
|
||||||
"babel-jest": "25.2.6",
|
"babel-jest": "25.2.6",
|
||||||
"babel-loader": "^8.0.6",
|
"babel-loader": "^8.0.6",
|
||||||
"buffer": "^5.5.0",
|
"buffer": "^5.5.0",
|
||||||
"currency-formatter": "jlongster/currency-formatter",
|
|
||||||
"damerau-levenshtein": "^1.0.4",
|
"damerau-levenshtein": "^1.0.4",
|
||||||
"date-fns": "2.0.0-alpha.27",
|
"date-fns": "2.0.0-alpha.27",
|
||||||
"esm": "^3.0.82",
|
"esm": "^3.0.82",
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
let currencyFormatter = require('currency-formatter');
|
|
||||||
|
|
||||||
export function cleanUUID(uuid) {
|
export function cleanUUID(uuid) {
|
||||||
return uuid.replace(/-/g, '');
|
return uuid.replace(/-/g, '');
|
||||||
}
|
}
|
||||||
|
@ -267,7 +265,7 @@ export function setNumberFormat(format) {
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case 'space-comma':
|
case 'space-comma':
|
||||||
locale = 'za-ZA';
|
locale = 'en-ZA';
|
||||||
regex = /[^-0-9,]/g;
|
regex = /[^-0-9,]/g;
|
||||||
separator = ',';
|
separator = ',';
|
||||||
break;
|
break;
|
||||||
|
@ -286,12 +284,10 @@ export function setNumberFormat(format) {
|
||||||
numberFormat = {
|
numberFormat = {
|
||||||
value: format,
|
value: format,
|
||||||
separator,
|
separator,
|
||||||
// This is the keep in line with the Intl API which we might
|
formatter: new Intl.NumberFormat(locale, {
|
||||||
// switch to when it's available on all mobile platforms
|
minimumFractionDigits: 2,
|
||||||
formatter: {
|
maximumFractionDigits: 2
|
||||||
format: number =>
|
}),
|
||||||
currencyFormatter.format(number, { locale, format: '%v' })
|
|
||||||
},
|
|
||||||
regex
|
regex
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -300,7 +296,7 @@ export function getNumberFormat() {
|
||||||
return numberFormat;
|
return numberFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
setNumberFormat('1,000.33');
|
setNumberFormat('comma-dot');
|
||||||
|
|
||||||
export function toRelaxedNumber(value) {
|
export function toRelaxedNumber(value) {
|
||||||
return integerToAmount(currencyToInteger(value) || 0);
|
return integerToAmount(currencyToInteger(value) || 0);
|
||||||
|
@ -319,10 +315,6 @@ export function amountToCurrency(n) {
|
||||||
return numberFormat.formatter.format(n);
|
return numberFormat.formatter.format(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function amountToPrettyCurrency(n, code) {
|
|
||||||
return currencyFormatter.format(n, { code });
|
|
||||||
}
|
|
||||||
|
|
||||||
export function currencyToAmount(str) {
|
export function currencyToAmount(str) {
|
||||||
let amount = parseFloat(
|
let amount = parseFloat(
|
||||||
str.replace(numberFormat.regex, '').replace(numberFormat.separator, '.')
|
str.replace(numberFormat.regex, '').replace(numberFormat.separator, '.')
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { looselyParseAmount } from './util';
|
import { looselyParseAmount, getNumberFormat, setNumberFormat } from './util';
|
||||||
|
|
||||||
describe('utility functions', () => {
|
describe('utility functions', () => {
|
||||||
test('looseParseAmount works with basic numbers', () => {
|
test('looseParseAmount works with basic numbers', () => {
|
||||||
|
@ -28,4 +28,26 @@ describe('utility functions', () => {
|
||||||
// thought through more.
|
// thought through more.
|
||||||
expect(looselyParseAmount('3_45_23.10')).toBe(34523.1);
|
expect(looselyParseAmount('3_45_23.10')).toBe(34523.1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('number formatting works with comma-dot format', () => {
|
||||||
|
setNumberFormat('comma-dot');
|
||||||
|
const formatter = getNumberFormat().formatter;
|
||||||
|
|
||||||
|
expect(formatter.format('1234.56')).toBe('1,234.56');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('number formatting works with dot-comma format', () => {
|
||||||
|
setNumberFormat('dot-comma');
|
||||||
|
const formatter = getNumberFormat().formatter;
|
||||||
|
|
||||||
|
expect(formatter.format('1234.56')).toBe('1.234,56');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('number formatting works with space-comma format', () => {
|
||||||
|
setNumberFormat('space-comma');
|
||||||
|
const formatter = getNumberFormat().formatter;
|
||||||
|
|
||||||
|
// grouping separator space char is a non-breaking space, or UTF-16 \xa0
|
||||||
|
expect(formatter.format('1234.56')).toBe('1\xa0234,56');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { styles, colors } from '../../style';
|
import { styles, colors } from '../../style';
|
||||||
import { View, Text, Modal, P, Button } from '../common';
|
import { View, Text, Modal, P, Button } from '../common';
|
||||||
import { amountToPrettyCurrency } from 'loot-core/src/shared/util';
|
|
||||||
import {
|
import {
|
||||||
fromPlaidAccountType,
|
fromPlaidAccountType,
|
||||||
prettyAccountType
|
prettyAccountType
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
"@react-navigation/native-stack": "^6.1.0",
|
"@react-navigation/native-stack": "^6.1.0",
|
||||||
"@reactions/component": "^2.0.2",
|
"@reactions/component": "^2.0.2",
|
||||||
"@sentry/react-native": "3.0.2",
|
"@sentry/react-native": "3.0.2",
|
||||||
"currency-formatter": "jlongster/currency-formatter",
|
|
||||||
"jsc-android": "^241213.1.0",
|
"jsc-android": "^241213.1.0",
|
||||||
"loot-core": "*",
|
"loot-core": "*",
|
||||||
"memoize-one": "^4.0.0",
|
"memoize-one": "^4.0.0",
|
||||||
|
|
17
yarn.lock
17
yarn.lock
|
@ -2979,10 +2979,6 @@ accepts@^1.3.7, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7, accepts@~1.3.8:
|
||||||
mime-types "~2.1.34"
|
mime-types "~2.1.34"
|
||||||
negotiator "0.6.3"
|
negotiator "0.6.3"
|
||||||
|
|
||||||
accounting@jlongster/accounting.js:
|
|
||||||
version "0.4.2"
|
|
||||||
resolved "https://codeload.github.com/jlongster/accounting.js/tar.gz/cfccd812a0eb9f38853f81e0a00ac5a170afc75a"
|
|
||||||
|
|
||||||
acorn-dynamic-import@^3.0.0:
|
acorn-dynamic-import@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278"
|
resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278"
|
||||||
|
@ -5428,14 +5424,6 @@ csv-stringify@^5.3.6:
|
||||||
resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00"
|
resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00"
|
||||||
integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==
|
integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==
|
||||||
|
|
||||||
currency-formatter@jlongster/currency-formatter:
|
|
||||||
version "1.5.5"
|
|
||||||
resolved "https://codeload.github.com/jlongster/currency-formatter/tar.gz/64ded5bde37e7c1add2636b5c5e3de5722300fe0"
|
|
||||||
dependencies:
|
|
||||||
accounting jlongster/accounting.js
|
|
||||||
locale-currency "0.0.2"
|
|
||||||
object-assign "^4.1.1"
|
|
||||||
|
|
||||||
cyclist@^1.0.1:
|
cyclist@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
|
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
|
||||||
|
@ -10519,11 +10507,6 @@ loader-utils@^2.0.0:
|
||||||
emojis-list "^3.0.0"
|
emojis-list "^3.0.0"
|
||||||
json5 "^2.1.2"
|
json5 "^2.1.2"
|
||||||
|
|
||||||
locale-currency@0.0.2:
|
|
||||||
version "0.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/locale-currency/-/locale-currency-0.0.2.tgz#e2c90607563ce47a59f9559e45a70e24e4db4b6d"
|
|
||||||
integrity sha1-4skGB1Y85HpZ+VWeRacOJOTbS20=
|
|
||||||
|
|
||||||
localforage@^1.8.1:
|
localforage@^1.8.1:
|
||||||
version "1.10.0"
|
version "1.10.0"
|
||||||
resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4"
|
resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4"
|
||||||
|
|
Loading…
Reference in a new issue