Handle undefined gas limits and prices in transaction-breakdown.component (#6246)

feature/default_network_editable
Dan J Miller 6 years ago committed by GitHub
parent be2d2bad4b
commit b8f143f1c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 43
      ui/app/components/transaction-breakdown/transaction-breakdown.component.js
  2. 16
      ui/app/components/transaction-breakdown/transaction-breakdown.container.js

@ -6,8 +6,6 @@ import CurrencyDisplay from '../currency-display'
import UserPreferencedCurrencyDisplay from '../user-preferenced-currency-display' import UserPreferencedCurrencyDisplay from '../user-preferenced-currency-display'
import HexToDecimal from '../hex-to-decimal' import HexToDecimal from '../hex-to-decimal'
import { GWEI, PRIMARY, SECONDARY } from '../../constants/common' import { GWEI, PRIMARY, SECONDARY } from '../../constants/common'
import { getHexGasTotal } from '../../helpers/confirm-transaction/util'
import { sumHexes } from '../../helpers/transactions.util'
export default class TransactionBreakdown extends PureComponent { export default class TransactionBreakdown extends PureComponent {
static contextTypes = { static contextTypes = {
@ -19,6 +17,11 @@ export default class TransactionBreakdown extends PureComponent {
className: PropTypes.string, className: PropTypes.string,
nativeCurrency: PropTypes.string.isRequired, nativeCurrency: PropTypes.string.isRequired,
showFiat: PropTypes.bool, showFiat: PropTypes.bool,
gas: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
gasPrice: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
gasUsed: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
totalInHex: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
} }
static defaultProps = { static defaultProps = {
@ -28,13 +31,7 @@ export default class TransactionBreakdown extends PureComponent {
render () { render () {
const { t } = this.context const { t } = this.context
const { transaction, className, nativeCurrency, showFiat } = this.props const { gas, gasPrice, value, className, nativeCurrency, showFiat, totalInHex, gasUsed } = this.props
const { txParams: { gas, gasPrice, value } = {}, txReceipt: { gasUsed } = {} } = transaction
const gasLimit = typeof gasUsed === 'string' ? gasUsed : gas
const hexGasTotal = getHexGasTotal({ gasLimit, gasPrice })
const totalInHex = sumHexes(hexGasTotal, value)
return ( return (
<div className={classnames('transaction-breakdown', className)}> <div className={classnames('transaction-breakdown', className)}>
@ -52,10 +49,13 @@ export default class TransactionBreakdown extends PureComponent {
title={`${t('gasLimit')} (${t('units')})`} title={`${t('gasLimit')} (${t('units')})`}
className="transaction-breakdown__row-title" className="transaction-breakdown__row-title"
> >
<HexToDecimal {typeof gas !== 'undefined'
className="transaction-breakdown__value" ? <HexToDecimal
value={gas} className="transaction-breakdown__value"
/> value={gas}
/>
: '?'
}
</TransactionBreakdownRow> </TransactionBreakdownRow>
{ {
typeof gasUsed === 'string' && ( typeof gasUsed === 'string' && (
@ -71,13 +71,16 @@ export default class TransactionBreakdown extends PureComponent {
) )
} }
<TransactionBreakdownRow title={t('gasPrice')}> <TransactionBreakdownRow title={t('gasPrice')}>
<CurrencyDisplay {typeof gasPrice !== 'undefined'
className="transaction-breakdown__value" ? <CurrencyDisplay
currency={nativeCurrency} className="transaction-breakdown__value"
denomination={GWEI} currency={nativeCurrency}
value={gasPrice} denomination={GWEI}
hideLabel value={gasPrice}
/> hideLabel
/>
: '?'
}
</TransactionBreakdownRow> </TransactionBreakdownRow>
<TransactionBreakdownRow title={t('total')}> <TransactionBreakdownRow title={t('total')}>
<div> <div>

@ -1,14 +1,28 @@
import { connect } from 'react-redux' import { connect } from 'react-redux'
import TransactionBreakdown from './transaction-breakdown.component' import TransactionBreakdown from './transaction-breakdown.component'
import {getIsMainnet, getNativeCurrency, preferencesSelector} from '../../selectors' import {getIsMainnet, getNativeCurrency, preferencesSelector} from '../../selectors'
import { getHexGasTotal } from '../../helpers/confirm-transaction/util'
import { sumHexes } from '../../helpers/transactions.util'
const mapStateToProps = (state) => { const mapStateToProps = (state, ownProps) => {
const { transaction } = ownProps
const { txParams: { gas, gasPrice, value } = {}, txReceipt: { gasUsed } = {} } = transaction
const { showFiatInTestnets } = preferencesSelector(state) const { showFiatInTestnets } = preferencesSelector(state)
const isMainnet = getIsMainnet(state) const isMainnet = getIsMainnet(state)
const gasLimit = typeof gasUsed === 'string' ? gasUsed : gas
const hexGasTotal = gasLimit && gasPrice && getHexGasTotal({ gasLimit, gasPrice }) || '0x0'
const totalInHex = sumHexes(hexGasTotal, value)
return { return {
nativeCurrency: getNativeCurrency(state), nativeCurrency: getNativeCurrency(state),
showFiat: (isMainnet || !!showFiatInTestnets), showFiat: (isMainnet || !!showFiatInTestnets),
totalInHex,
gas,
gasPrice,
value,
gasUsed,
} }
} }

Loading…
Cancel
Save