diff --git a/web/cashtab/src/components/Send/__tests__/__snapshots__/Send.test.js.snap b/web/cashtab/src/components/Send/__tests__/__snapshots__/Send.test.js.snap --- a/web/cashtab/src/components/Send/__tests__/__snapshots__/Send.test.js.snap +++ b/web/cashtab/src/components/Send/__tests__/__snapshots__/Send.test.js.snap @@ -683,7 +683,7 @@
- 0.06047469 + 0.06 XEC
, diff --git a/web/cashtab/src/components/Tokens/__tests__/__snapshots__/Tokens.test.js.snap b/web/cashtab/src/components/Tokens/__tests__/__snapshots__/Tokens.test.js.snap --- a/web/cashtab/src/components/Tokens/__tests__/__snapshots__/Tokens.test.js.snap +++ b/web/cashtab/src/components/Tokens/__tests__/__snapshots__/Tokens.test.js.snap @@ -165,7 +165,7 @@
- 0.06047469 + 0.06 XEC
, diff --git a/web/cashtab/src/components/Wallet/__tests__/__snapshots__/Wallet.test.js.snap b/web/cashtab/src/components/Wallet/__tests__/__snapshots__/Wallet.test.js.snap --- a/web/cashtab/src/components/Wallet/__tests__/__snapshots__/Wallet.test.js.snap +++ b/web/cashtab/src/components/Wallet/__tests__/__snapshots__/Wallet.test.js.snap @@ -279,7 +279,7 @@
- 0.06047469 + 0.06 XEC
, diff --git a/web/cashtab/src/utils/__tests__/cashMethods.test.js b/web/cashtab/src/utils/__tests__/cashMethods.test.js --- a/web/cashtab/src/utils/__tests__/cashMethods.test.js +++ b/web/cashtab/src/utils/__tests__/cashMethods.test.js @@ -44,26 +44,6 @@ 10000000.12345678, ); }); - it(`Formats a large number to add spaces as thousands separator`, () => { - expect(formatBalance(1000000012345678)).toBe('1 000 000 012 345 678'); - }); - it(`Formats a large number with 2 decimal places to add as thousands separator`, () => { - expect(formatBalance(10000000123456.78)).toBe('10 000 000 123 456.78'); - }); - it(`Formats a large number with 9 decimal places to add as thousands separator without adding them to decimals`, () => { - expect(formatBalance('10000000123456.789123456')).toBe( - '10 000 000 123 456.789123456', - ); - }); - it(`formatBalance handles an input of 0`, () => { - expect(formatBalance('0')).toBe('0'); - }); - it(`formatBalance handles an input of undefined`, () => { - expect(formatBalance(undefined)).toBe(undefined); - }); - it(`formatBalance handles an input of null`, () => { - expect(formatBalance(null)).toBe(null); - }); it(`Correctly converts an array of length 10 to an array of 4 arrays, each with max length 3`, () => { expect(batchArray(unbatchedArray, 3)).toStrictEqual( arrayBatchedByThree, @@ -122,4 +102,41 @@ ), ).toBe('simpleledger:qz2708636snqhsxu8wnlka78h6fdp77ar5syue64fa'); }); + it(`test formatBalance with an input of 0`, () => { + expect(formatBalance('0')).toBe('0'); + }); + it(`test formatBalance with zero XEC balance input`, () => { + expect(formatBalance('0', 'en-US')).toBe('0'); + }); + it(`test formatBalance with a small XEC balance input with 2+ decimal figures`, () => { + expect(formatBalance('1574.5445', 'en-US')).toBe('1,574.54'); + }); + it(`test formatBalance with 1 Million XEC balance input`, () => { + expect(formatBalance('1000000', 'en-US')).toBe('1,000,000'); + }); + it(`test formatBalance with 1 Billion XEC balance input`, () => { + expect(formatBalance('1000000000', 'en-US')).toBe('1,000,000,000'); + }); + it(`test formatBalance with total supply as XEC balance input`, () => { + expect(formatBalance('21000000000000', 'en-US')).toBe( + '21,000,000,000,000', + ); + }); + it(`test formatBalance with > total supply as XEC balance input`, () => { + expect(formatBalance('31000000000000', 'en-US')).toBe( + '31,000,000,000,000', + ); + }); + it(`test formatBalance with no balance`, () => { + expect(formatBalance('', 'en-US')).toBe('0'); + }); + it(`test formatBalance with null input`, () => { + expect(formatBalance(null, 'en-US')).toBe('0'); + }); + it(`test formatBalance with undefined as input`, () => { + expect(formatBalance(undefined, 'en-US')).toBe('NaN'); + }); + it(`test formatBalance with non-numeric input`, () => { + expect(formatBalance('CainBCHA', 'en-US')).toBe('NaN'); + }); }); diff --git a/web/cashtab/src/utils/cashMethods.js b/web/cashtab/src/utils/cashMethods.js --- a/web/cashtab/src/utils/cashMethods.js +++ b/web/cashtab/src/utils/cashMethods.js @@ -47,18 +47,20 @@ return sendAmountSmallestDenomination; }; -export const formatBalance = x => { +export const formatBalance = (unformattedBalance, optionalLocale) => { try { - let balanceInParts = x.toString().split('.'); - balanceInParts[0] = balanceInParts[0].replace( - /\B(?=(\d{3})+(?!\d))/g, - ' ', - ); - return balanceInParts.join('.'); + if (optionalLocale === undefined) { + return new Number(unformattedBalance).toLocaleString({ + maximumFractionDigits: currency.cashDecimals, + }); + } + return new Number(unformattedBalance).toLocaleString(optionalLocale, { + maximumFractionDigits: currency.cashDecimals, + }); } catch (err) { - console.log(`Error in formatBalance for ${x}`); + console.log(`Error in formatBalance for ${unformattedBalance}`); console.log(err); - return x; + return unformattedBalance; } };