show < 0.00001 ETH when amount gets really small

This commit is contained in:
Steve Klebanoff 2018-12-12 17:34:14 -08:00
parent 167a3fbc11
commit 8d54772389
2 changed files with 26 additions and 7 deletions

View File

@ -20,14 +20,24 @@ export const format = {
ethUnitAmount?: BigNumber,
decimalPlaces: number = 4,
defaultText: React.ReactNode = '0 ETH',
minUnitAmountToDisplay: BigNumber = new BigNumber('0.00001'),
): React.ReactNode => {
if (_.isUndefined(ethUnitAmount)) {
return defaultText;
}
const roundedAmount = ethUnitAmount.round(decimalPlaces).toDigits(decimalPlaces);
// Sometimes for small ETH amounts (i.e. 0.000045) the amount rounded to 4 decimalPlaces is 0
// If that is the case, show to 1 significant digit
const displayAmount = roundedAmount.eq(BIG_NUMBER_ZERO) ? ethUnitAmount.toPrecision(1) : roundedAmount;
let roundedAmount = ethUnitAmount.round(decimalPlaces).toDigits(decimalPlaces);
if (roundedAmount.eq(BIG_NUMBER_ZERO) && ethUnitAmount.greaterThan(BIG_NUMBER_ZERO)) {
// Sometimes for small ETH amounts (i.e. 0.000045) the amount rounded to 4 decimalPlaces is 0
// If that is the case, show to 1 significant digit
roundedAmount = new BigNumber(ethUnitAmount.toPrecision(1));
}
const displayAmount =
roundedAmount.greaterThan(BIG_NUMBER_ZERO) && roundedAmount.lessThan(minUnitAmountToDisplay)
? `< ${minUnitAmountToDisplay.toString()}`
: roundedAmount.toString();
return `${displayAmount} ETH`;
},
ethBaseUnitAmountInUsd: (
@ -35,12 +45,13 @@ export const format = {
ethUsdPrice?: BigNumber,
decimalPlaces: number = 2,
defaultText: React.ReactNode = '$0.00',
minUnitAmountToDisplay: BigNumber = new BigNumber('0.00001'),
): React.ReactNode => {
if (_.isUndefined(ethBaseUnitAmount) || _.isUndefined(ethUsdPrice)) {
return defaultText;
}
const ethUnitAmount = Web3Wrapper.toUnitAmount(ethBaseUnitAmount, ETH_DECIMALS);
return format.ethUnitAmountInUsd(ethUnitAmount, ethUsdPrice, decimalPlaces);
return format.ethUnitAmountInUsd(ethUnitAmount, ethUsdPrice, decimalPlaces, minUnitAmountToDisplay);
},
ethUnitAmountInUsd: (
ethUnitAmount?: BigNumber,

View File

@ -42,8 +42,16 @@ describe('format', () => {
expect(format.ethUnitAmount(BIG_NUMBER_IRRATIONAL)).toBe('5.301 ETH');
});
it('shows 1 significant digit when rounded amount would be 0', () => {
expect(format.ethUnitAmount(new BigNumber(0.00000045))).toBe('0.0000005 ETH');
expect(format.ethUnitAmount(new BigNumber(0.00000044))).toBe('0.0000004 ETH');
expect(format.ethUnitAmount(new BigNumber(0.00003))).toBe('0.00003 ETH');
expect(format.ethUnitAmount(new BigNumber(0.000034))).toBe('0.00003 ETH');
expect(format.ethUnitAmount(new BigNumber(0.000035))).toBe('0.00004 ETH');
});
it('shows < 0.00001 when hits threshold', () => {
expect(format.ethUnitAmount(new BigNumber(0.000011))).toBe('0.00001 ETH');
expect(format.ethUnitAmount(new BigNumber(0.00001))).toBe('0.00001 ETH');
expect(format.ethUnitAmount(new BigNumber(0.000009))).toBe('< 0.00001 ETH');
expect(format.ethUnitAmount(new BigNumber(0.0000000009))).toBe('< 0.00001 ETH');
expect(format.ethUnitAmount(new BigNumber(0))).toBe('0 ETH');
});
it('returns defaultText param when ethUnitAmount is not defined', () => {
const defaultText = 'defaultText';