From b349a5c8b1c48b0f763da73dfc212011834cccf2 Mon Sep 17 00:00:00 2001 From: Erik Marks <25517051+rekmarks@users.noreply.github.com> Date: Wed, 9 Sep 2020 22:00:04 -0700 Subject: [PATCH] Convert ConfirmTokenTransactionBase to functional component (#9373) * Convert ConfirmTokenTransactionBase to functional component Co-authored-by: Mark Stacey --- ui/app/helpers/utils/conversions.util.test.js | 12 ++ ...onfirm-token-transaction-base.component.js | 183 +++++++++--------- 2 files changed, 100 insertions(+), 95 deletions(-) diff --git a/ui/app/helpers/utils/conversions.util.test.js b/ui/app/helpers/utils/conversions.util.test.js index f4c08cc74..5f344e3e5 100644 --- a/ui/app/helpers/utils/conversions.util.test.js +++ b/ui/app/helpers/utils/conversions.util.test.js @@ -1,6 +1,18 @@ import assert from 'assert' +import { ETH } from '../constants/common' import * as utils from './conversions.util' +describe('getWeiHexFromDecimalValue', function () { + it('should correctly convert 0 in ETH', function () { + const weiValue = utils.getWeiHexFromDecimalValue({ + value: '0', + fromCurrency: ETH, + fromDenomination: ETH, + }) + assert.equal(weiValue, '0') + }) +}) + describe('decETHToDecWEI', function () { it('should correctly convert 1 ETH to WEI', function () { const weiValue = utils.decETHToDecWEI('1') diff --git a/ui/app/pages/confirm-token-transaction-base/confirm-token-transaction-base.component.js b/ui/app/pages/confirm-token-transaction-base/confirm-token-transaction-base.component.js index 65b39fbb8..1bbdde3b1 100644 --- a/ui/app/pages/confirm-token-transaction-base/confirm-token-transaction-base.component.js +++ b/ui/app/pages/confirm-token-transaction-base/confirm-token-transaction-base.component.js @@ -1,5 +1,7 @@ -import React, { Component } from 'react' +import React, { useContext, useMemo } from 'react' import PropTypes from 'prop-types' +import BigNumber from 'bignumber.js' +import { I18nContext } from '../../contexts/i18n' import ConfirmTransactionBase from '../confirm-transaction-base' import UserPreferencedCurrencyDisplay from '../../components/app/user-preferenced-currency-display' import { @@ -11,112 +13,103 @@ import { import { getWeiHexFromDecimalValue } from '../../helpers/utils/conversions.util' import { ETH, PRIMARY } from '../../helpers/constants/common' -export default class ConfirmTokenTransactionBase extends Component { - static contextTypes = { - t: PropTypes.func, - } +export default function ConfirmTokenTransactionBase ({ + toAddress, + tokenAddress, + tokenAmount = '0', + tokenSymbol, + fiatTransactionTotal, + ethTransactionTotal, + contractExchangeRate, + conversionRate, + currentCurrency, +}) { + const t = useContext(I18nContext) - static propTypes = { - tokenAddress: PropTypes.string, - toAddress: PropTypes.string, - tokenAmount: PropTypes.string, - tokenSymbol: PropTypes.string, - fiatTransactionTotal: PropTypes.string, - ethTransactionTotal: PropTypes.string, - contractExchangeRate: PropTypes.number, - conversionRate: PropTypes.number, - currentCurrency: PropTypes.string, - } + const hexWeiValue = useMemo(() => { + if (tokenAmount === '0' || !contractExchangeRate) { + return '0' + } - static defaultProps = { - tokenAmount: '0', - } + const decimalEthValue = ( + (new BigNumber(tokenAmount)).times(new BigNumber(contractExchangeRate)) + ).toFixed() - getFiatTransactionAmount () { - const { tokenAmount, currentCurrency, conversionRate, contractExchangeRate } = this.props + return getWeiHexFromDecimalValue({ + value: decimalEthValue, + fromCurrency: ETH, + fromDenomination: ETH, + }) + }, [tokenAmount, contractExchangeRate]) - return convertTokenToFiat({ + const secondaryTotalTextOverride = useMemo(() => { + if (typeof contractExchangeRate === 'undefined') { + return formatCurrency(fiatTransactionTotal, currentCurrency) + } + + const fiatTransactionAmount = convertTokenToFiat({ value: tokenAmount, toCurrency: currentCurrency, conversionRate, contractExchangeRate, }) - } - - renderSubtitleComponent () { - const { contractExchangeRate, tokenAmount } = this.props - - const decimalEthValue = (tokenAmount * contractExchangeRate) || '0' - const hexWeiValue = getWeiHexFromDecimalValue({ - value: decimalEthValue, - fromCurrency: ETH, - fromDenomination: ETH, - }) - - return typeof contractExchangeRate === 'undefined' - ? ( - - { this.context.t('noConversionRateAvailable') } - - ) : ( - - ) - } - - renderPrimaryTotalTextOverride () { - const { tokenAmount, tokenSymbol, ethTransactionTotal } = this.props - const tokensText = `${tokenAmount} ${tokenSymbol}` - - return ( -
- { `${tokensText} + ` } - - { ethTransactionTotal } -
- ) - } - - getSecondaryTotalTextOverride () { - const { fiatTransactionTotal, currentCurrency, contractExchangeRate } = this.props - - if (typeof contractExchangeRate === 'undefined') { - return formatCurrency(fiatTransactionTotal, currentCurrency) - } - const fiatTransactionAmount = this.getFiatTransactionAmount() const fiatTotal = addFiat(fiatTransactionAmount, fiatTransactionTotal) const roundedFiatTotal = roundExponential(fiatTotal) return formatCurrency(roundedFiatTotal, currentCurrency) - } + }, + [ + currentCurrency, + conversionRate, + contractExchangeRate, + fiatTransactionTotal, + tokenAmount, + ]) - render () { - const { - toAddress, - tokenAddress, - tokenSymbol, - tokenAmount, - ...restProps - } = this.props + const tokensText = `${tokenAmount} ${tokenSymbol}` - const tokensText = `${tokenAmount} ${tokenSymbol}` - - return ( - - ) - } + return ( + + { t('noConversionRateAvailable') } + + ) : ( + + ) + } + primaryTotalTextOverride={( +
+ { `${tokensText} + ` } + + { ethTransactionTotal } +
+ )} + secondaryTotalTextOverride={secondaryTotalTextOverride} + /> + ) +} + +ConfirmTokenTransactionBase.propTypes = { + tokenAddress: PropTypes.string, + toAddress: PropTypes.string, + tokenAmount: PropTypes.string, + tokenSymbol: PropTypes.string, + fiatTransactionTotal: PropTypes.string, + ethTransactionTotal: PropTypes.string, + contractExchangeRate: PropTypes.number, + conversionRate: PropTypes.number, + currentCurrency: PropTypes.string, }