aboutsummaryrefslogtreecommitdiffstats
path: root/ui/app/components/send/send-v2-container.js
blob: cdbee0cdc154434af52ed0208f4d73966e3a53c3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
const connect = require('react-redux').connect
const actions = require('../../actions')
const abi = require('ethereumjs-abi')
const SendEther = require('../../send-v2')
const { withRouter } = require('react-router-dom')
const { compose } = require('recompose')

const {
  accountsWithSendEtherInfoSelector,
  getCurrentAccountWithSendEtherInfo,
  conversionRateSelector,
  getSelectedToken,
  getSelectedAddress,
  getAddressBook,
  getSendFrom,
  getCurrentCurrency,
  getSelectedTokenToFiatRate,
  getSelectedTokenContract,
} = require('../../selectors')

import {
  updateSendErrors,
} from '../../ducks/send'

module.exports = compose(
  withRouter,
  connect(mapStateToProps, mapDispatchToProps)
)(SendEther)

function mapStateToProps (state) {
  const fromAccounts = accountsWithSendEtherInfoSelector(state)
  const selectedAddress = getSelectedAddress(state)
  const selectedToken = getSelectedToken(state)
  const conversionRate = conversionRateSelector(state)

  let data
  let primaryCurrency
  let tokenToFiatRate
  if (selectedToken) {
    data = Array.prototype.map.call(
      abi.rawEncode(['address', 'uint256'], [selectedAddress, '0x0']),
      x => ('00' + x.toString(16)).slice(-2)
    ).join('')

    primaryCurrency = selectedToken.symbol

    tokenToFiatRate = getSelectedTokenToFiatRate(state)
  }

  return {
    ...state.metamask.send,
    from: getSendFrom(state) || getCurrentAccountWithSendEtherInfo(state),
    fromAccounts,
    toAccounts: [...fromAccounts, ...getAddressBook(state)],
    conversionRate,
    selectedToken,
    primaryCurrency,
    convertedCurrency: getCurrentCurrency(state),
    data,
    selectedAddress,
    amountConversionRate: selectedToken ? tokenToFiatRate : conversionRate,
    tokenContract: getSelectedTokenContract(state),
    unapprovedTxs: state.metamask.unapprovedTxs,
    network: state.metamask.network,
    isToken: Boolean(getSelectedToken(state)),
  }
}

function mapDispatchToProps (dispatch) {
  return {
    showCustomizeGasModal: () => dispatch(actions.showModal({ name: 'CUSTOMIZE_GAS' })),
    estimateGas: params => dispatch(actions.estimateGas(params)),
    getGasPrice: () => dispatch(actions.getGasPrice()),
    signTokenTx: (tokenAddress, toAddress, amount, txData) => (
      dispatch(actions.signTokenTx(tokenAddress, toAddress, amount, txData))
    ),
    signTx: txParams => dispatch(actions.signTx(txParams)),
    updateAndApproveTx: txParams => dispatch(actions.updateAndApproveTx(txParams)),
    updateTx: txData => dispatch(actions.updateTransaction(txData)),
    setSelectedAddress: address => dispatch(actions.setSelectedAddress(address)),
    addToAddressBook: (address, nickname) => dispatch(actions.addToAddressBook(address, nickname)),
    setGasTotal: newTotal => dispatch(actions.setGasTotal(newTotal)),
    updateGasTotal: () => dispatch(actions.updateGasTotal()),
    updateGasPrice: newGasPrice => dispatch(actions.updateGasPrice(newGasPrice)),
    updateGasLimit: newGasLimit => dispatch(actions.updateGasLimit(newGasLimit)),
    updateSendTokenBalance: tokenBalance => dispatch(actions.updateSendTokenBalance(tokenBalance)),
    updateSendFrom: newFrom => dispatch(actions.updateSendFrom(newFrom)),
    updateSendTo: (newTo, nickname) => dispatch(actions.updateSendTo(newTo, nickname)),
    updateSendAmount: newAmount => dispatch(actions.updateSendAmount(newAmount)),
    updateSendMemo: newMemo => dispatch(actions.updateSendMemo(newMemo)),
    updateSendErrors: newError => dispatch(updateSendErrors(newError)),
    clearSend: () => dispatch(actions.clearSend()),
    setMaxModeTo: bool => dispatch(actions.setMaxModeTo(bool)),
  }
}