mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-25 11:28:51 +01:00
e791882959
* Handle and set gas estimation when max mode is clicked Add componentDidMount to SendAmountRow to check for maxMode boolean to update amount and gas.
138 lines
3.2 KiB
JavaScript
138 lines
3.2 KiB
JavaScript
import React, { Component } from 'react'
|
|
import PropTypes from 'prop-types'
|
|
import { debounce } from 'lodash'
|
|
import SendRowWrapper from '../send-row-wrapper'
|
|
import AmountMaxButton from './amount-max-button'
|
|
import UserPreferencedCurrencyInput from '../../../../components/app/user-preferenced-currency-input'
|
|
import UserPreferencedTokenInput from '../../../../components/app/user-preferenced-token-input'
|
|
|
|
export default class SendAmountRow extends Component {
|
|
|
|
static propTypes = {
|
|
amount: PropTypes.string,
|
|
amountConversionRate: PropTypes.oneOfType([
|
|
PropTypes.string,
|
|
PropTypes.number,
|
|
]),
|
|
balance: PropTypes.string,
|
|
conversionRate: PropTypes.number,
|
|
gasTotal: PropTypes.string,
|
|
inError: PropTypes.bool,
|
|
primaryCurrency: PropTypes.string,
|
|
selectedToken: PropTypes.object,
|
|
setMaxModeTo: PropTypes.func,
|
|
tokenBalance: PropTypes.string,
|
|
updateGasFeeError: PropTypes.func,
|
|
updateSendAmount: PropTypes.func,
|
|
updateSendAmountError: PropTypes.func,
|
|
updateGas: PropTypes.func,
|
|
maxModeOn: PropTypes.bool,
|
|
}
|
|
|
|
static contextTypes = {
|
|
t: PropTypes.func,
|
|
}
|
|
|
|
componentDidUpdate (prevProps) {
|
|
const { maxModeOn: prevMaxModeOn, gasTotal: prevGasTotal } = prevProps
|
|
const { maxModeOn, amount, gasTotal, selectedToken } = this.props
|
|
|
|
if (maxModeOn && selectedToken && !prevMaxModeOn) {
|
|
this.updateGas(amount)
|
|
}
|
|
|
|
if (prevGasTotal !== gasTotal) {
|
|
this.validateAmount(amount)
|
|
}
|
|
}
|
|
|
|
updateGas = debounce(this.updateGas.bind(this), 500)
|
|
|
|
validateAmount (amount) {
|
|
const {
|
|
amountConversionRate,
|
|
balance,
|
|
conversionRate,
|
|
gasTotal,
|
|
primaryCurrency,
|
|
selectedToken,
|
|
tokenBalance,
|
|
updateGasFeeError,
|
|
updateSendAmountError,
|
|
} = this.props
|
|
|
|
updateSendAmountError({
|
|
amount,
|
|
amountConversionRate,
|
|
balance,
|
|
conversionRate,
|
|
gasTotal,
|
|
primaryCurrency,
|
|
selectedToken,
|
|
tokenBalance,
|
|
})
|
|
|
|
if (selectedToken) {
|
|
updateGasFeeError({
|
|
amountConversionRate,
|
|
balance,
|
|
conversionRate,
|
|
gasTotal,
|
|
primaryCurrency,
|
|
selectedToken,
|
|
tokenBalance,
|
|
})
|
|
}
|
|
}
|
|
|
|
updateAmount (amount) {
|
|
const { updateSendAmount, setMaxModeTo } = this.props
|
|
|
|
setMaxModeTo(false)
|
|
updateSendAmount(amount)
|
|
}
|
|
|
|
updateGas (amount) {
|
|
const { selectedToken, updateGas } = this.props
|
|
|
|
if (selectedToken) {
|
|
updateGas({ amount })
|
|
}
|
|
}
|
|
|
|
handleChange = (newAmount) => {
|
|
this.validateAmount(newAmount)
|
|
this.updateGas(newAmount)
|
|
this.updateAmount(newAmount)
|
|
}
|
|
|
|
renderInput () {
|
|
const { amount, inError, selectedToken } = this.props
|
|
const Component = selectedToken ? UserPreferencedTokenInput : UserPreferencedCurrencyInput
|
|
|
|
return (
|
|
<Component
|
|
onChange={this.handleChange}
|
|
error={inError}
|
|
value={amount}
|
|
/>
|
|
)
|
|
}
|
|
|
|
render () {
|
|
const { gasTotal, inError } = this.props
|
|
|
|
return (
|
|
<SendRowWrapper
|
|
label={`${this.context.t('amount')}:`}
|
|
showError={inError}
|
|
errorType="amount"
|
|
>
|
|
{gasTotal && <AmountMaxButton inError={inError} />}
|
|
{ this.renderInput() }
|
|
</SendRowWrapper>
|
|
)
|
|
}
|
|
|
|
}
|