parent
89911dda17
commit
e9a8c24cc4
@ -1,19 +0,0 @@ |
|||||||
.confirm-send-token { |
|
||||||
&__title { |
|
||||||
padding: 4px 0; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
} |
|
||||||
|
|
||||||
&__identicon { |
|
||||||
flex: 0 0 auto; |
|
||||||
} |
|
||||||
|
|
||||||
&__title-text { |
|
||||||
font-size: 2.25rem; |
|
||||||
white-space: nowrap; |
|
||||||
overflow: hidden; |
|
||||||
text-overflow: ellipsis; |
|
||||||
padding-left: 8px; |
|
||||||
} |
|
||||||
} |
|
@ -1,165 +0,0 @@ |
|||||||
const Component = require('react').Component |
|
||||||
const connect = require('react-redux').connect |
|
||||||
const h = require('react-hyperscript') |
|
||||||
const PropTypes = require('prop-types') |
|
||||||
const clone = require('clone') |
|
||||||
const abi = require('human-standard-token-abi') |
|
||||||
const abiDecoder = require('abi-decoder') |
|
||||||
abiDecoder.addABI(abi) |
|
||||||
const inherits = require('util').inherits |
|
||||||
const actions = require('../../actions') |
|
||||||
const { getSymbolAndDecimals } = require('../../token-util') |
|
||||||
const ConfirmSendEther = require('./confirm-send-ether') |
|
||||||
const ConfirmSendToken = require('./confirm-send-token') |
|
||||||
const ConfirmDeployContract = require('./confirm-deploy-contract') |
|
||||||
const Loading = require('../loading-screen') |
|
||||||
|
|
||||||
const TX_TYPES = { |
|
||||||
DEPLOY_CONTRACT: 'deploy_contract', |
|
||||||
SEND_ETHER: 'send_ether', |
|
||||||
SEND_TOKEN: 'send_token', |
|
||||||
} |
|
||||||
|
|
||||||
module.exports = connect(mapStateToProps, mapDispatchToProps)(PendingTx) |
|
||||||
|
|
||||||
function mapStateToProps (state) { |
|
||||||
const { |
|
||||||
conversionRate, |
|
||||||
identities, |
|
||||||
tokens: existingTokens, |
|
||||||
} = state.metamask |
|
||||||
const accounts = state.metamask.accounts |
|
||||||
const selectedAddress = state.metamask.selectedAddress || Object.keys(accounts)[0] |
|
||||||
return { |
|
||||||
conversionRate, |
|
||||||
identities, |
|
||||||
selectedAddress, |
|
||||||
existingTokens, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function mapDispatchToProps (dispatch) { |
|
||||||
return { |
|
||||||
backToAccountDetail: address => dispatch(actions.backToAccountDetail(address)), |
|
||||||
cancelTransaction: ({ id }) => dispatch(actions.cancelTx({ id })), |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
inherits(PendingTx, Component) |
|
||||||
function PendingTx () { |
|
||||||
Component.call(this) |
|
||||||
this.state = { |
|
||||||
isFetching: true, |
|
||||||
transactionType: '', |
|
||||||
tokenAddress: '', |
|
||||||
tokenSymbol: '', |
|
||||||
tokenDecimals: '', |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
PendingTx.prototype.componentDidMount = function () { |
|
||||||
this.setTokenData() |
|
||||||
} |
|
||||||
|
|
||||||
PendingTx.prototype.componentDidUpdate = function (prevProps, prevState) { |
|
||||||
if (prevState.isFetching) { |
|
||||||
this.setTokenData() |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
PendingTx.prototype.setTokenData = async function () { |
|
||||||
const { existingTokens } = this.props |
|
||||||
const txMeta = this.gatherTxMeta() |
|
||||||
const txParams = txMeta.txParams || {} |
|
||||||
|
|
||||||
if (txMeta.loadingDefaults) { |
|
||||||
return |
|
||||||
} |
|
||||||
|
|
||||||
if (!txParams.to) { |
|
||||||
return this.setState({ |
|
||||||
transactionType: TX_TYPES.DEPLOY_CONTRACT, |
|
||||||
isFetching: false, |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
// inspect tx data for supported special confirmation screens
|
|
||||||
let isTokenTransaction = false |
|
||||||
if (txParams.data) { |
|
||||||
const tokenData = abiDecoder.decodeMethod(txParams.data) |
|
||||||
const { name: tokenMethodName } = tokenData || {} |
|
||||||
isTokenTransaction = (tokenMethodName === 'transfer') |
|
||||||
} |
|
||||||
|
|
||||||
if (isTokenTransaction) { |
|
||||||
const { symbol, decimals } = await getSymbolAndDecimals(txParams.to, existingTokens) |
|
||||||
|
|
||||||
this.setState({ |
|
||||||
transactionType: TX_TYPES.SEND_TOKEN, |
|
||||||
tokenAddress: txParams.to, |
|
||||||
tokenSymbol: symbol, |
|
||||||
tokenDecimals: decimals, |
|
||||||
isFetching: false, |
|
||||||
}) |
|
||||||
} else { |
|
||||||
this.setState({ |
|
||||||
transactionType: TX_TYPES.SEND_ETHER, |
|
||||||
isFetching: false, |
|
||||||
}) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
PendingTx.prototype.gatherTxMeta = function () { |
|
||||||
const props = this.props |
|
||||||
const state = this.state |
|
||||||
const txData = clone(state.txData) || clone(props.txData) |
|
||||||
|
|
||||||
return txData |
|
||||||
} |
|
||||||
|
|
||||||
PendingTx.prototype.render = function () { |
|
||||||
const { |
|
||||||
isFetching, |
|
||||||
transactionType, |
|
||||||
tokenAddress, |
|
||||||
tokenSymbol, |
|
||||||
tokenDecimals, |
|
||||||
} = this.state |
|
||||||
|
|
||||||
const { sendTransaction } = this.props |
|
||||||
|
|
||||||
if (isFetching) { |
|
||||||
return h(Loading, { |
|
||||||
loadingMessage: this.context.t('generatingTransaction'), |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
switch (transactionType) { |
|
||||||
case TX_TYPES.SEND_ETHER: |
|
||||||
return h(ConfirmSendEther, { |
|
||||||
txData: this.gatherTxMeta(), |
|
||||||
sendTransaction, |
|
||||||
}) |
|
||||||
case TX_TYPES.SEND_TOKEN: |
|
||||||
return h(ConfirmSendToken, { |
|
||||||
txData: this.gatherTxMeta(), |
|
||||||
sendTransaction, |
|
||||||
token: { |
|
||||||
address: tokenAddress, |
|
||||||
symbol: tokenSymbol, |
|
||||||
decimals: tokenDecimals, |
|
||||||
}, |
|
||||||
}) |
|
||||||
case TX_TYPES.DEPLOY_CONTRACT: |
|
||||||
return h(ConfirmDeployContract, { |
|
||||||
txData: this.gatherTxMeta(), |
|
||||||
sendTransaction, |
|
||||||
}) |
|
||||||
default: |
|
||||||
return h(Loading) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
PendingTx.contextTypes = { |
|
||||||
t: PropTypes.func, |
|
||||||
} |
|
Loading…
Reference in new issue