aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/app/components/page-container/page-container-content.component.js2
-rw-r--r--ui/app/components/page-container/page-container-footer.component.js2
-rw-r--r--ui/app/components/page-container/page-container-header.component.js2
-rw-r--r--ui/app/components/page-container/page-container.component.js3
-rw-r--r--ui/app/components/send_/account-list-item/account-list-item.component.js30
-rw-r--r--ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.component.js20
-rw-r--r--ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.container.js17
-rw-r--r--ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.utils.js2
-rw-r--r--ui/app/components/send_/send-content/send-amount-row/send-amount-row.component.js21
-rw-r--r--ui/app/components/send_/send-content/send-amount-row/send-amount-row.container.js37
-rw-r--r--ui/app/components/send_/send-content/send-amount-row/send-amount-row.selectors.js6
-rw-r--r--ui/app/components/send_/send-content/send-amount-row/send-amount-row.utils.js21
-rw-r--r--ui/app/components/send_/send-content/send-content.component.js9
-rw-r--r--ui/app/components/send_/send-content/send-from-row/from-dropdown/from-dropdown.component.js20
-rw-r--r--ui/app/components/send_/send-content/send-from-row/send-from-row.component.js17
-rw-r--r--ui/app/components/send_/send-content/send-from-row/send-from-row.container.js15
-rw-r--r--ui/app/components/send_/send-content/send-from-row/send-from-row.utils.js2
-rw-r--r--ui/app/components/send_/send-content/send-gas-row/send-gas-row.component.js17
-rw-r--r--ui/app/components/send_/send-content/send-row-wrapper/send-row-error-message/send-row-error-message.component.js6
-rw-r--r--ui/app/components/send_/send-content/send-row-wrapper/send-row-error-message/send-row-error-message.container.js2
-rw-r--r--ui/app/components/send_/send-content/send-row-wrapper/send-row-wrapper.component.js18
-rw-r--r--ui/app/components/send_/send-content/send-to-row/send-to-row.component.js37
-rw-r--r--ui/app/components/send_/send-content/send-to-row/send-to-row.container.js16
-rw-r--r--ui/app/components/send_/send-content/send-to-row/send-to-row.utils.js4
-rw-r--r--ui/app/components/send_/send-footer/send-footer.component.js18
-rw-r--r--ui/app/components/send_/send-footer/send-footer.container.js15
-rw-r--r--ui/app/components/send_/send-footer/send-footer.selectors.js2
-rw-r--r--ui/app/components/send_/send-footer/send-footer.utils.js2
-rw-r--r--ui/app/components/send_/send-header/send-header.component.js8
-rw-r--r--ui/app/components/send_/send-header/send-header.container.js4
-rw-r--r--ui/app/components/send_/send.selectors.js249
-rw-r--r--ui/app/components/send_/send.utils.js24
-rw-r--r--ui/app/ducks/send.js28
-rw-r--r--ui/app/selectors.js2
-rw-r--r--ui/app/send-v2.js17
35 files changed, 330 insertions, 365 deletions
diff --git a/ui/app/components/page-container/page-container-content.component.js b/ui/app/components/page-container/page-container-content.component.js
index ffd62894c..a1d6988cc 100644
--- a/ui/app/components/page-container/page-container-content.component.js
+++ b/ui/app/components/page-container/page-container-content.component.js
@@ -12,7 +12,7 @@ export default class PageContainerContent extends Component {
<div className="page-container__content">
{this.props.children}
</div>
- );
+ )
}
}
diff --git a/ui/app/components/page-container/page-container-footer.component.js b/ui/app/components/page-container/page-container-footer.component.js
index 0ef14c9d7..475ce6b1c 100644
--- a/ui/app/components/page-container/page-container-footer.component.js
+++ b/ui/app/components/page-container/page-container-footer.component.js
@@ -31,7 +31,7 @@ export default class PageContainerFooter extends Component {
</button>
</div>
- );
+ )
}
}
diff --git a/ui/app/components/page-container/page-container-header.component.js b/ui/app/components/page-container/page-container-header.component.js
index 9adc88fb3..5c9d63221 100644
--- a/ui/app/components/page-container/page-container-header.component.js
+++ b/ui/app/components/page-container/page-container-header.component.js
@@ -29,7 +29,7 @@ export default class PageContainerHeader extends Component {
/>
</div>
- );
+ )
}
}
diff --git a/ui/app/components/page-container/page-container.component.js b/ui/app/components/page-container/page-container.component.js
index 1b5e7f819..dc3745d4a 100644
--- a/ui/app/components/page-container/page-container.component.js
+++ b/ui/app/components/page-container/page-container.component.js
@@ -8,12 +8,11 @@ export default class PageContainer extends Component {
};
render () {
- console.log(`QQQQQQQQQQQQQQQQQ this.props.children`, this.props.children);
return (
<div className="page-container">
{this.props.children}
</div>
- );
+ )
}
}
diff --git a/ui/app/components/send_/account-list-item/account-list-item.component.js b/ui/app/components/send_/account-list-item/account-list-item.component.js
index 6b63aecf0..b8407d147 100644
--- a/ui/app/components/send_/account-list-item/account-list-item.component.js
+++ b/ui/app/components/send_/account-list-item/account-list-item.component.js
@@ -19,14 +19,14 @@ export default class AccountListItem extends Component {
render () {
const {
- className,
account,
- handleClick,
- icon = null,
+ className,
conversionRate,
currentCurrency,
- displayBalance = true,
displayAddress = false,
+ displayBalance = true,
+ handleClick,
+ icon = null,
} = this.props
const { name, address, balance } = account || {}
@@ -36,32 +36,32 @@ export default class AccountListItem extends Component {
onClick={() => handleClick({ name, address, balance })}
>
- <div className='account-list-item__top-row'>
+ <div className="account-list-item__top-row">
<Identicon
address={address}
+ className="account-list-item__identicon"
diameter={18}
- className='account-list-item__identicon'
/>
- <div className='account-list-item__account-name'>{ name || address }</div>
+ <div className="account-list-item__account-name">{ name || address }</div>
- {icon && <div className='account-list-item__icon'>{ icon }</div>}
+ {icon && <div className="account-list-item__icon">{ icon }</div>}
</div>
- {displayAddress && name && <div className='account-list-item__account-address'>
+ {displayAddress && name && <div className="account-list-item__account-address">
{ checksumAddress(address) }
</div>}
{displayBalance && <CurrencyDisplay
- primaryCurrency='ETH'
- convertedCurrency={currentCurrency}
- value={balance}
+ className="account-list-item__account-balances"
conversionRate={conversionRate}
+ convertedBalanceClassName="account-list-item__account-secondary-balance"
+ convertedCurrency={currentCurrency}
+ primaryBalanceClassName="account-list-item__account-primary-balance"
+ primaryCurrency="ETH"
readOnly={true}
- className='account-list-item__account-balances'
- primaryBalanceClassName='account-list-item__account-primary-balance'
- convertedBalanceClassName='account-list-item__account-secondary-balance'
+ value={balance}
/>}
</div>)
diff --git a/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.component.js b/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.component.js
index 6705a332d..c3b5b6ae4 100644
--- a/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.component.js
+++ b/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.component.js
@@ -4,29 +4,29 @@ import PropTypes from 'prop-types'
export default class AmountMaxButton extends Component {
static propTypes = {
- tokenBalance: PropTypes.string,
- gasTotal: PropTypes.string,
balance: PropTypes.string,
+ gasTotal: PropTypes.string,
+ maxModeOn: PropTypes.bool,
selectedToken: PropTypes.object,
setAmountToMax: PropTypes.func,
setMaxModeTo: PropTypes.func,
- maxModeOn: PropTypes.bool,
+ tokenBalance: PropTypes.string,
};
setAmountToMax = function () {
const {
balance,
- tokenBalance,
- selectedToken,
gasTotal,
+ selectedToken,
setAmountToMax,
+ tokenBalance,
} = this.props
setAmountToMax({
- tokenBalance,
- selectedToken,
+ balance,
gasTotal,
- setAmountToMax,
+ selectedToken,
+ tokenBalance,
})
}
@@ -35,7 +35,7 @@ export default class AmountMaxButton extends Component {
return (
<div
- className='send-v2__amount-max'
+ className="send-v2__amount-max"
onClick={(event) => {
event.preventDefault()
setMaxModeTo(true)
@@ -44,7 +44,7 @@ export default class AmountMaxButton extends Component {
>
{!maxModeOn ? this.context.t('max') : ''}
</div>
- );
+ )
}
}
diff --git a/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.container.js b/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.container.js
index 1b694902f..5bdb67995 100644
--- a/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.container.js
+++ b/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.container.js
@@ -1,28 +1,29 @@
import { connect } from 'react-redux'
import {
- getSelectedToken,
getGasTotal,
- getTokenBalance,
+ getSelectedToken,
getSendFromBalance,
+ getTokenBalance,
} from '../../../send.selectors.js'
import { getMaxModeOn } from '../send-amount-row.selectors.js'
import { calcMaxAmount } from './amount-max-button.utils.js'
import {
updateSendAmount,
+ updateSendErrors,
setMaxModeTo,
} from '../../../actions'
import AmountMaxButton from './amount-max-button.component'
-export default connect(mapStateToProps, mapDispatchToProps)(SendToRow)
+export default connect(mapStateToProps, mapDispatchToProps)(AmountMaxButton)
function mapStateToProps (state) {
return {
- selectedToken: getSelectedToken(state),
- maxModeOn: getMaxModeOn(state),
+ balance: getSendFromBalance(state),
gasTotal: getGasTotal(state),
+ maxModeOn: getMaxModeOn(state),
+ selectedToken: getSelectedToken(state),
tokenBalance: getTokenBalance(state),
- balance: getSendFromBalance(state),
}
}
@@ -31,7 +32,7 @@ function mapDispatchToProps (dispatch) {
setAmountToMax: maxAmountDataObject => {
updateSendErrors({ amount: null })
updateSendAmount(calcMaxAmount(maxAmountDataObject))
- }
+ },
setMaxModeTo: bool => dispatch(setMaxModeTo(bool)),
}
-} \ No newline at end of file
+}
diff --git a/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.utils.js b/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.utils.js
index 54aacc8d7..d87f2424b 100644
--- a/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.utils.js
+++ b/ui/app/components/send_/send-content/send-amount-row/amount-max-button/amount-max-button.utils.js
@@ -18,5 +18,5 @@ function calcMaxAmount ({ balance, gasTotal, selectedToken, tokenBalance }) {
}
module.exports = {
- calcMaxAmount
+ calcMaxAmount,
}
diff --git a/ui/app/components/send_/send-content/send-amount-row/send-amount-row.component.js b/ui/app/components/send_/send-content/send-amount-row/send-amount-row.component.js
index 544664dc8..5c3084365 100644
--- a/ui/app/components/send_/send-content/send-amount-row/send-amount-row.component.js
+++ b/ui/app/components/send_/send-content/send-amount-row/send-amount-row.component.js
@@ -7,22 +7,26 @@ import CurrencyDisplay from '../../../send/currency-display'
export default class SendAmountRow extends Component {
static propTypes = {
+ amount: PropTypes.string,
amountConversionRate: PropTypes.number,
+ balance: PropTypes.string,
conversionRate: PropTypes.number,
+ convertedCurrency: PropTypes.string,
gasTotal: PropTypes.string,
+ inError: PropTypes.bool,
primaryCurrency: PropTypes.string,
selectedToken: PropTypes.object,
+ setMaxModeTo: PropTypes.func,
tokenBalance: PropTypes.string,
- updateSendAmountError: PropTypes.func,
updateSendAmount: PropTypes.func,
- setMaxModeTo: PropTypes.func
+ updateSendAmountError: PropTypes.func,
}
validateAmount (amount) {
const {
amountConversionRate,
- conversionRate,
balance,
+ conversionRate,
gasTotal,
primaryCurrency,
selectedToken,
@@ -55,9 +59,8 @@ export default class SendAmountRow extends Component {
amount,
amountConversionRate,
convertedCurrency,
- inError,
gasTotal,
- maxModeOn,
+ inError,
primaryCurrency = 'ETH',
selectedToken,
} = this.props
@@ -70,16 +73,16 @@ export default class SendAmountRow extends Component {
>
{!inError && gasTotal && <AmountMaxButton />}
<CurrencyDisplay
+ conversionRate={amountConversionRate}
+ convertedCurrency={convertedCurrency}
+ handleChange={newAmount => this.handleAmountChange(newAmount)}
inError={inError}
primaryCurrency={primaryCurrency}
- convertedCurrency={convertedCurrency}
selectedToken={selectedToken}
value={amount || '0x0'}
- conversionRate={amountConversionRate}
- handleChange={newAmount => this.handleAmountChange(newAmount)}
/>
</SendRowWrapper>
- );
+ )
}
}
diff --git a/ui/app/components/send_/send-content/send-amount-row/send-amount-row.container.js b/ui/app/components/send_/send-content/send-amount-row/send-amount-row.container.js
index 55df68e69..16e88bede 100644
--- a/ui/app/components/send_/send-content/send-amount-row/send-amount-row.container.js
+++ b/ui/app/components/send_/send-content/send-amount-row/send-amount-row.container.js
@@ -1,24 +1,22 @@
import { connect } from 'react-redux'
import {
- getSelectedToken,
+ getConversionRate,
getConvertedCurrency,
- getSendAmount,
getGasTotal,
- getSelectedBalance,
- getTokenBalance,
+ getSelectedToken,
+ getSendAmount,
getSendFromBalance,
- getConversionRate,
+ getTokenBalance,
} from '../../send.selectors.js'
import {
- getMaxModeOn,
- sendAmountIsInError,
- getPrimaryCurrency,
getAmountConversionRate,
+ getPrimaryCurrency,
+ sendAmountIsInError,
} from './send-amount-row.selectors.js'
import { getAmountErrorObject } from './send-amount-row.utils.js'
import {
- updateSendAmount,
setMaxModeTo,
+ updateSendAmount,
updateSendErrors,
} from '../../../../actions'
import SendAmountRow from './send-amount-row.component'
@@ -27,26 +25,25 @@ export default connect(mapStateToProps, mapDispatchToProps)(SendAmountRow)
function mapStateToProps (state) {
return {
- selectedToken: getSelectedToken(state),
- primaryCurrency: getPrimaryCurrency(state),
- convertedCurrency: getConvertedCurrency(state),
- amountConversionRate: getAmountConversionRate(state),
- inError: sendAmountIsInError(state),
amount: getSendAmount(state),
- maxModeOn: getMaxModeOn(state),
- gasTotal: getGasTotal(state),
- tokenBalance: getTokenBalance(state),
+ amountConversionRate: getAmountConversionRate(state),
balance: getSendFromBalance(state),
conversionRate: getConversionRate(state),
+ convertedCurrency: getConvertedCurrency(state),
+ gasTotal: getGasTotal(state),
+ inError: sendAmountIsInError(state),
+ primaryCurrency: getPrimaryCurrency(state),
+ selectedToken: getSelectedToken(state),
+ tokenBalance: getTokenBalance(state),
}
}
function mapDispatchToProps (dispatch) {
return {
+ setMaxModeTo: bool => dispatch(setMaxModeTo(bool)),
+ updateSendAmount: newAmount => dispatch(updateSendAmount(newAmount)),
updateSendAmountError: (amountDataObject) => {
dispatch(updateSendErrors(getAmountErrorObject(amountDataObject)))
},
- updateSendAmount: newAmount => dispatch(updateSendAmount(newAmount)),
- setMaxModeTo: bool => dispatch(setMaxModeTo(bool)),
}
-} \ No newline at end of file
+}
diff --git a/ui/app/components/send_/send-content/send-amount-row/send-amount-row.selectors.js b/ui/app/components/send_/send-content/send-amount-row/send-amount-row.selectors.js
index c2620b4dc..88dee0dcb 100644
--- a/ui/app/components/send_/send-content/send-amount-row/send-amount-row.selectors.js
+++ b/ui/app/components/send_/send-content/send-amount-row/send-amount-row.selectors.js
@@ -5,10 +5,10 @@ import {
} from '../../send.selectors.js'
const selectors = {
+ getAmountConversionRate,
getMaxModeOn,
- sendAmountIsInError,
getPrimaryCurrency,
- getAmountConversionRate,
+ sendAmountIsInError,
}
module.exports = selectors
@@ -27,7 +27,7 @@ function getPrimaryCurrency (state) {
}
function getAmountConversionRate (state) {
- return Boolean(getSelectedToken(state))
+ return getSelectedToken(state)
? getSelectedTokenToFiatRate(state)
: getConversionRate(state)
}
diff --git a/ui/app/components/send_/send-content/send-amount-row/send-amount-row.utils.js b/ui/app/components/send_/send-content/send-amount-row/send-amount-row.utils.js
index 418b98c18..6ec5463d3 100644
--- a/ui/app/components/send_/send-content/send-amount-row/send-amount-row.utils.js
+++ b/ui/app/components/send_/send-content/send-amount-row/send-amount-row.utils.js
@@ -1,4 +1,3 @@
-const { isValidAddress } = require('../../../../util')
const {
conversionGreaterThan,
} = require('../../../../conversion-util')
@@ -9,31 +8,23 @@ const {
function getAmountErrorObject ({
amount,
- balance,
amountConversionRate,
+ balance,
conversionRate,
+ gasTotal,
primaryCurrency,
selectedToken,
- gasTotal,
tokenBalance,
}) {
- console.log(`#& getAmountErrorObject amount`, amount);
- console.log(`#& getAmountErrorObject balance`, balance);
- console.log(`#& getAmountErrorObject amountConversionRate`, amountConversionRate);
- console.log(`#& getAmountErrorObject conversionRate`, conversionRate);
- console.log(`#& getAmountErrorObject primaryCurrency`, primaryCurrency);
- console.log(`#& getAmountErrorObject selectedToken`, selectedToken);
- console.log(`#& getAmountErrorObject gasTotal`, gasTotal);
- console.log(`#& getAmountErrorObject tokenBalance`, tokenBalance);
let insufficientFunds = false
if (gasTotal && conversionRate) {
insufficientFunds = !isBalanceSufficient({
amount: selectedToken ? '0x0' : amount,
- gasTotal,
- balance,
- primaryCurrency,
amountConversionRate,
+ balance,
conversionRate,
+ gasTotal,
+ primaryCurrency,
})
}
@@ -66,5 +57,5 @@ function getAmountErrorObject ({
}
module.exports = {
- getAmountErrorObject
+ getAmountErrorObject,
}
diff --git a/ui/app/components/send_/send-content/send-content.component.js b/ui/app/components/send_/send-content/send-content.component.js
index 2d1fa52e9..1f5a06fcc 100644
--- a/ui/app/components/send_/send-content/send-content.component.js
+++ b/ui/app/components/send_/send-content/send-content.component.js
@@ -1,24 +1,23 @@
import React, { Component } from 'react'
import PageContainerContent from '../../page-container/page-container-content.component'
-import SendFromRow from './send-from-row/send-from-row.container'
-import SendToRow from './send-to-row/send-to-row.container'
import SendAmountRow from './send-amount-row/send-amount-row.container'
+import SendFromRow from './send-from-row/send-from-row.container'
import SendGasRow from './send-gas-row/send-gas-row.container'
+import SendToRow from './send-to-row/send-to-row.container'
export default class SendContent extends Component {
render () {
- console.log('111222333444555666777888999')
return (
<PageContainerContent>
- <div className='.send-v2__form'>
+ <div className=".send-v2__form">
<SendFromRow />
<SendToRow />
<SendAmountRow />
<SendGasRow />
</div>
</PageContainerContent>
- );
+ )
}
}
diff --git a/ui/app/components/send_/send-content/send-from-row/from-dropdown/from-dropdown.component.js b/ui/app/components/send_/send-content/send-from-row/from-dropdown/from-dropdown.component.js
index f215179ba..8af8eaf26 100644
--- a/ui/app/components/send_/send-content/send-from-row/from-dropdown/from-dropdown.component.js
+++ b/ui/app/components/send_/send-content/send-from-row/from-dropdown/from-dropdown.component.js
@@ -26,25 +26,26 @@ export default class FromDropdown extends Component {
renderDropdown () {
const {
accounts,
- selectedAccount,
closeDropdown,
onSelect,
+ selectedAccount,
} = this.props
return (<div>
<div
- className='send-v2__from-dropdown__close-area'
+ className="send-v2__from-dropdown__close-area"
onClick={() => closeDropdown}
/>
- <div className='send-v2__from-dropdown__list'>
- {...accounts.map(account => <AccountListItem
- className='account-list-item__dropdown'
+ <div className="send-v2__from-dropdown__list">
+ {...accounts.map((account, index) => <AccountListItem
account={account}
+ className="account-list-item__dropdown"
handleClick={() => {
onSelect(account)
closeDropdown()
}}
icon={this.getListItemIcon(account, selectedAccount.address)}
+ key={`from-dropdown-account-#${index}`}
/>)}
</div>
</div>)
@@ -52,13 +53,12 @@ export default class FromDropdown extends Component {
render () {
const {
- selectedAccount,
- openDropdown,
dropdownOpen,
+ openDropdown,
+ selectedAccount,
} = this.props
- console.log(`&*& openDropdown`, openDropdown);
- console.log(`&*& dropdownOpen`, dropdownOpen);
- return <div className='send-v2__from-dropdown'>
+
+ return <div className="send-v2__from-dropdown">
<AccountListItem
account={selectedAccount}
handleClick={openDropdown}
diff --git a/ui/app/components/send_/send-content/send-from-row/send-from-row.component.js b/ui/app/components/send_/send-content/send-from-row/send-from-row.component.js
index 0ae72c4ae..193262fa3 100644
--- a/ui/app/components/send_/send-content/send-from-row/send-from-row.component.js
+++ b/ui/app/components/send_/send-content/send-from-row/send-from-row.component.js
@@ -33,28 +33,27 @@ export default class SendFromRow extends Component {
render () {
const {
+ closeFromDropdown,
+ conversionRate,
from,
fromAccounts,
- conversionRate,
fromDropdownOpen,
- tokenContract,
openFromDropdown,
- closeFromDropdown,
} = this.props
- console.log(`$% SendFromRow fromAccounts`, fromAccounts);
+
return (
<SendRowWrapper label={`${this.context.t('from')}:`}>
<FromDropdown
- dropdownOpen={fromDropdownOpen}
accounts={fromAccounts}
- selectedAccount={from}
- onSelect={newFrom => this.handleFromChange(newFrom)}
- openDropdown={() => openFromDropdown()}
closeDropdown={() => closeFromDropdown()}
conversionRate={conversionRate}
+ dropdownOpen={fromDropdownOpen}
+ onSelect={newFrom => this.handleFromChange(newFrom)}
+ openDropdown={() => openFromDropdown()}
+ selectedAccount={from}
/>
</SendRowWrapper>
- );
+ )
}
}
diff --git a/ui/app/components/send_/send-content/send-from-row/send-from-row.container.js b/ui/app/components/send_/send-content/send-from-row/send-from-row.container.js
index e2815a01f..d62782e9f 100644
--- a/ui/app/components/send_/send-content/send-from-row/send-from-row.container.js
+++ b/ui/app/components/send_/send-content/send-from-row/send-from-row.container.js
@@ -1,8 +1,8 @@
import { connect } from 'react-redux'
import {
+ accountsWithSendEtherInfoSelector,
getConversionRate,
getSelectedTokenContract,
- accountsWithSendEtherInfoSelector,
getSendFromObject,
} from '../../send.selectors.js'
import {
@@ -10,23 +10,22 @@ import {
} from './send-from-row.selectors.js'
import { calcTokenUpdateAmount } from './send-from-row.utils.js'
import {
- updateSendTokenBalance,
updateSendFrom,
+ updateSendTokenBalance,
} from '../../../../actions'
import {
- openFromDropdown,
closeFromDropdown,
+ openFromDropdown,
} from '../../../../ducks/send'
import SendFromRow from './send-from-row.component'
export default connect(mapStateToProps, mapDispatchToProps)(SendFromRow)
function mapStateToProps (state) {
- console.log(`$% mapStateToProps accountsWithSendEtherInfoSelector`, accountsWithSendEtherInfoSelector);
return {
+ conversionRate: getConversionRate(state),
from: getSendFromObject(state),
fromAccounts: accountsWithSendEtherInfoSelector(state),
- conversionRate: getConversionRate(state),
fromDropdownOpen: getFromDropdownOpen(state),
tokenContract: getSelectedTokenContract(state),
}
@@ -34,14 +33,14 @@ function mapStateToProps (state) {
function mapDispatchToProps (dispatch) {
return {
+ closeFromDropdown: () => dispatch(closeFromDropdown()),
+ openFromDropdown: () => dispatch(openFromDropdown()),
+ updateSendFrom: newFrom => dispatch(updateSendFrom(newFrom)),
updateSendTokenBalance: (usersToken, selectedToken) => {
if (!usersToken) return
const tokenBalance = calcTokenUpdateAmount(selectedToken, selectedToken)
dispatch(updateSendTokenBalance(tokenBalance))
},
- updateSendFrom: newFrom => dispatch(updateSendFrom(newFrom)),
- openFromDropdown: () => dispatch(openFromDropdown()),
- closeFromDropdown: () => dispatch(closeFromDropdown()),
}
}
diff --git a/ui/app/components/send_/send-content/send-from-row/send-from-row.utils.js b/ui/app/components/send_/send-content/send-from-row/send-from-row.utils.js
index 4faae48dc..0aaaef793 100644
--- a/ui/app/components/send_/send-content/send-from-row/send-from-row.utils.js
+++ b/ui/app/components/send_/send-content/send-from-row/send-from-row.utils.js
@@ -8,5 +8,5 @@ function calcTokenUpdateAmount (usersToken, selectedToken) {
}
module.exports = {
- calcTokenUpdateAmount
+ calcTokenUpdateAmount,
}
diff --git a/ui/app/components/send_/send-content/send-gas-row/send-gas-row.component.js b/ui/app/components/send_/send-content/send-gas-row/send-gas-row.component.js
index 056a04aae..65dc6ad93 100644
--- a/ui/app/components/send_/send-content/send-gas-row/send-gas-row.component.js
+++ b/ui/app/components/send_/send-content/send-gas-row/send-gas-row.component.js
@@ -8,20 +8,23 @@ export default class SendGasRow extends Component {
static propTypes = {
closeFromDropdown: PropTypes.func,
conversionRate: PropTypes.number,
+ convertedCurrency: PropTypes.string,
from: PropTypes.string,
fromAccounts: PropTypes.array,
fromDropdownOpen: PropTypes.bool,
+ gasLoadingError: PropTypes.bool,
+ gasTotal: PropTypes.string,
openFromDropdown: PropTypes.func,
+ showCustomizeGasModal: PropTypes.bool,
tokenContract: PropTypes.object,
updateSendFrom: PropTypes.func,
updateSendTokenBalance: PropTypes.func,
- gasLoadingError: PropTypes.bool,
};
async handleFromChange (newFrom) {
const {
- updateSendFrom,
tokenContract,
+ updateSendFrom,
updateSendTokenBalance,
} = this.props
@@ -36,22 +39,22 @@ export default class SendGasRow extends Component {
const {
conversionRate,
convertedCurrency,
- showCustomizeGasModal,
- gasTotal,
gasLoadingError,
+ gasTotal,
+ showCustomizeGasModal,
} = this.props
return (
<SendRowWrapper label={`${this.context.t('gasFee')}:`}>
<GasFeeDisplay
- gasTotal={gasTotal}
conversionRate={conversionRate}
convertedCurrency={convertedCurrency}
- onClick={() => showCustomizeGasModal()}
gasLoadingError={gasLoadingError}
+ gasTotal={gasTotal}
+ onClick={() => showCustomizeGasModal()}
/>
</SendRowWrapper>
- );
+ )
}
}
diff --git a/ui/app/components/send_/send-content/send-row-wrapper/send-row-error-message/send-row-error-message.component.js b/ui/app/components/send_/send-content/send-row-wrapper/send-row-error-message/send-row-error-message.component.js
index e553ae67e..c031248c7 100644
--- a/ui/app/components/send_/send-content/send-row-wrapper/send-row-error-message/send-row-error-message.component.js
+++ b/ui/app/components/send_/send-content/send-row-wrapper/send-row-error-message/send-row-error-message.component.js
@@ -14,13 +14,13 @@ export default class SendRowErrorMessage extends Component {
return (
errorMessage
- ? <div className='send-v2__error'>{this.context.t(errorMessage)}</div>
+ ? <div className="send-v2__error">{this.context.t(errorMessage)}</div>
: null
- );
+ )
}
}
SendRowErrorMessage.contextTypes = {
t: PropTypes.func,
-} \ No newline at end of file
+}
diff --git a/ui/app/components/send_/send-content/send-row-wrapper/send-row-error-message/send-row-error-message.container.js b/ui/app/components/send_/send-content/send-row-wrapper/send-row-error-message/send-row-error-message.container.js
index 002426904..59622047f 100644
--- a/ui/app/components/send_/send-content/send-row-wrapper/send-row-error-message/send-row-error-message.container.js
+++ b/ui/app/components/send_/send-content/send-row-wrapper/send-row-error-message/send-row-error-message.container.js
@@ -9,4 +9,4 @@ function mapStateToProps (state, ownProps) {
errors: getSendErrors(state),
errorType: ownProps.errorType,
}
-} \ No newline at end of file
+}
diff --git a/ui/app/components/send_/send-content/send-row-wrapper/send-row-wrapper.component.js b/ui/app/components/send_/send-content/send-row-wrapper/send-row-wrapper.component.js
index 99134a466..c6b75eccd 100644
--- a/ui/app/components/send_/send-content/send-row-wrapper/send-row-wrapper.component.js
+++ b/ui/app/components/send_/send-content/send-row-wrapper/send-row-wrapper.component.js
@@ -5,22 +5,22 @@ import SendRowErrorMessage from './send-row-error-message/send-row-error-message
export default class SendRowWrapper extends Component {
static propTypes = {
- label: PropTypes.string,
- showError: PropTypes.bool,
children: PropTypes.node,
errorType: PropTypes.string,
+ label: PropTypes.string,
+ showError: PropTypes.bool,
};
render () {
const {
- label,
- errorType = '',
- showError = false,
- children,
+ children,
+ errorType = '',
+ label,
+ showError = false,
} = this.props
- let formField = Array.isArray(children) ? children[1] || children[0] : children
- let customLabelContent = children.length === 1 ? children[0] : null
+ const formField = Array.isArray(children) ? children[1] || children[0] : children
+ const customLabelContent = children.length === 1 ? children[0] : null
return (
<div className="send-v2__form-row">
@@ -33,7 +33,7 @@ export default class SendRowWrapper extends Component {
{formField}
</div>
</div>
- );
+ )
}
}
diff --git a/ui/app/components/send_/send-content/send-to-row/send-to-row.component.js b/ui/app/components/send_/send-content/send-to-row/send-to-row.component.js
index a20bbf434..a6e4c1624 100644
--- a/ui/app/components/send_/send-content/send-to-row/send-to-row.component.js
+++ b/ui/app/components/send_/send-content/send-to-row/send-to-row.component.js
@@ -6,15 +6,15 @@ import EnsInput from '../../../ens-input'
export default class SendToRow extends Component {
static propTypes = {
+ closeToDropdown: PropTypes.func,
+ inError: PropTypes.bool,
+ network: PropTypes.string,
+ openToDropdown: PropTypes.func,
to: PropTypes.string,
toAccounts: PropTypes.array,
toDropdownOpen: PropTypes.bool,
- inError: PropTypes.bool,
updateSendTo: PropTypes.func,
updateSendToError: PropTypes.func,
- openToDropdown: PropTypes.func,
- closeToDropdown: PropTypes.func,
- network: PropTypes.string,
};
handleToChange (to, nickname = '') {
@@ -25,40 +25,35 @@ export default class SendToRow extends Component {
render () {
const {
- from,
- fromAccounts,
- toAccounts,
- conversionRate,
- fromDropdownOpen,
- tokenContract,
- openToDropdown,
closeToDropdown,
- network,
inError,
+ network,
+ openToDropdown,
to,
+ toAccounts,
toDropdownOpen,
} = this.props
return (
<SendRowWrapper
+ errorType={'to'}
label={`${this.context.t('to')}:`}
showError={inError}
- errorType={'to'}
>
<EnsInput
- name={'address'}
- placeholder={this.context.t('recipientAddress')}
- network={network}
- to={to}
accounts={toAccounts}
- dropdownOpen={toDropdownOpen}
- openDropdown={() => openToDropdown()}
closeDropdown={() => closeToDropdown()}
- onChange={(newTo, newNickname) => this.handleToChange(newTo, newNickname)}
+ dropdownOpen={toDropdownOpen}
inError={inError}
+ name={'address'}
+ network={network}
+ onChange={(newTo, newNickname) => this.handleToChange(newTo, newNickname)}
+ openDropdown={() => openToDropdown()}
+ placeholder={this.context.t('recipientAddress')}
+ to={to}
/>
</SendRowWrapper>
- );
+ )
}
}
diff --git a/ui/app/components/send_/send-content/send-to-row/send-to-row.container.js b/ui/app/components/send_/send-content/send-to-row/send-to-row.container.js
index 661ec1f0c..b55455f8b 100644
--- a/ui/app/components/send_/send-content/send-to-row/send-to-row.container.js
+++ b/ui/app/components/send_/send-content/send-to-row/send-to-row.container.js
@@ -1,8 +1,7 @@
import { connect } from 'react-redux'
import {
- getSendTo,
- getToAccounts,
getCurrentNetwork,
+ getSendTo,
getSendToAccounts,
} from '../../send.selectors.js'
import {
@@ -23,23 +22,22 @@ import SendToRow from './send-to-row.component'
export default connect(mapStateToProps, mapDispatchToProps)(SendToRow)
function mapStateToProps (state) {
- updateSendTo
return {
+ inError: sendToIsInError(state),
+ network: getCurrentNetwork(state),
to: getSendTo(state),
toAccounts: getSendToAccounts(state),
toDropdownOpen: getToDropdownOpen(state),
- inError: sendToIsInError(state),
- network: getCurrentNetwork(state),
}
}
function mapDispatchToProps (dispatch) {
return {
+ closeToDropdown: () => dispatch(closeToDropdown()),
+ openToDropdown: () => dispatch(openToDropdown()),
+ updateSendTo: (to, nickname) => dispatch(updateSendTo(to, nickname)),
updateSendToError: (to) => {
dispatch(updateSendErrors(getToErrorObject(to)))
},
- updateSendTo: (to, nickname) => dispatch(updateSendTo(to, nickname)),
- openToDropdown: () => dispatch(openToDropdown()),
- closeToDropdown: () => dispatch(closeToDropdown()),
}
-} \ No newline at end of file
+}
diff --git a/ui/app/components/send_/send-content/send-to-row/send-to-row.utils.js b/ui/app/components/send_/send-content/send-to-row/send-to-row.utils.js
index 52bfde009..d290bf461 100644
--- a/ui/app/components/send_/send-content/send-to-row/send-to-row.utils.js
+++ b/ui/app/components/send_/send-content/send-to-row/send-to-row.utils.js
@@ -8,10 +8,10 @@ function getToErrorObject (to) {
} else if (!isValidAddress(to)) {
toError = 'invalidAddressRecipient'
}
-
+
return { to: toError }
}
module.exports = {
- getToErrorObject
+ getToErrorObject,
}
diff --git a/ui/app/components/send_/send-footer/send-footer.component.js b/ui/app/components/send_/send-footer/send-footer.component.js
index 64dd027cf..ffece433e 100644
--- a/ui/app/components/send_/send-footer/send-footer.component.js
+++ b/ui/app/components/send_/send-footer/send-footer.component.js
@@ -6,24 +6,24 @@ import { CONFIRM_TRANSACTION_ROUTE, DEFAULT_ROUTE } from '../../../routes'
export default class SendFooter extends Component {
static propTypes = {
- addToAddressBook: PropTypes.func,
+ addToAddressBookIfNew: PropTypes.func,
amount: PropTypes.string,
clearSend: PropTypes.func,
+ disabled: PropTypes.bool,
editingTransactionId: PropTypes.string,
- errors: PropTypes.object,
+ errors: PropTypes.object,
from: PropTypes.object,
gasLimit: PropTypes.string,
gasPrice: PropTypes.string,
gasTotal: PropTypes.string,
history: PropTypes.object,
selectedToken: PropTypes.object,
- signTokenTx: PropTypes.func,
- signTx: PropTypes.func,
+ sign: PropTypes.func,
to: PropTypes.string,
toAccounts: PropTypes.array,
tokenBalance: PropTypes.string,
unapprovedTxs: PropTypes.object,
- updateTx: PropTypes.func,
+ update: PropTypes.func,
};
onSubmit (event) {
@@ -56,13 +56,13 @@ export default class SendFooter extends Component {
editingTransactionId
? update({
- from,
- to,
amount,
+ editingTransactionId,
+ from,
gas,
gasPrice,
selectedToken,
- editingTransactionId,
+ to,
unapprovedTxs,
})
: sign({ selectedToken, to, amount, from, gas, gasPrice })
@@ -83,7 +83,7 @@ export default class SendFooter extends Component {
onSubmit={e => this.onSubmit(e)}
disabled={disabled}
/>
- );
+ )
}
}
diff --git a/ui/app/components/send_/send-footer/send-footer.container.js b/ui/app/components/send_/send-footer/send-footer.container.js
index fff6e284f..288c4daf2 100644
--- a/ui/app/components/send_/send-footer/send-footer.container.js
+++ b/ui/app/components/send_/send-footer/send-footer.container.js
@@ -1,5 +1,5 @@
import { connect } from 'react-redux'
-import ethUtil from 'ethereumjs-util'
+import ethUtil from 'ethereumjs-util'
import {
addToAddressBook,
clearSend,
@@ -27,31 +27,32 @@ import {
} from './send-footer.selectors'
import {
addressIsNew,
- formShouldBeDisabled,
constructTxParams,
+ constructUpdatedTx,
+ formShouldBeDisabled,
} from './send-footer.utils'
export default connect(mapStateToProps, mapDispatchToProps)(SendFooter)
function mapStateToProps (state) {
return {
- isToken: Boolean(getSelectedToken(state)),
- inError: isSendFormInError(state),
+ amount: getSendAmount(state),
disabled: formShouldBeDisabled({
inError: isSendFormInError(state),
selectedToken: getSelectedToken(state),
tokenBalance: getTokenBalance(state),
gasTotal: getGasTotal(state),
}),
- amount: getSendAmount(state),
editingTransactionId: getSendEditingTransactionId(state),
from: getSendFromObject(state),
gasLimit: getGasLimit(state),
gasPrice: getGasPrice(state),
+ inError: isSendFormInError(state),
+ isToken: Boolean(getSelectedToken(state)),
selectedToken: getSelectedToken(state),
to: getSendTo(state),
- unapprovedTxs: getUnapprovedTxs(state),
toAccounts: getSendToAccounts(state),
+ unapprovedTxs: getUnapprovedTxs(state),
}
}
@@ -102,6 +103,6 @@ function mapDispatchToProps (dispatch) {
// TODO: nickname, i.e. addToAddressBook(recipient, nickname)
dispatch(addToAddressBook(hexPrefixedAddress, nickname))
}
- }
+ },
}
}
diff --git a/ui/app/components/send_/send-footer/send-footer.selectors.js b/ui/app/components/send_/send-footer/send-footer.selectors.js
index ccd4706ea..e8fef6be6 100644
--- a/ui/app/components/send_/send-footer/send-footer.selectors.js
+++ b/ui/app/components/send_/send-footer/send-footer.selectors.js
@@ -9,4 +9,4 @@ module.exports = selectors
function isSendFormInError (state) {
const { amount, to } = getSendErrors(state)
return Boolean(amount || to !== null)
-} \ No newline at end of file
+}
diff --git a/ui/app/components/send_/send-footer/send-footer.utils.js b/ui/app/components/send_/send-footer/send-footer.utils.js
index 23d5655c7..353c0e347 100644
--- a/ui/app/components/send_/send-footer/send-footer.utils.js
+++ b/ui/app/components/send_/send-footer/send-footer.utils.js
@@ -1,5 +1,5 @@
import ethAbi from 'ethereumjs-abi'
-import ethUtil from 'ethereumjs-util'
+import ethUtil from 'ethereumjs-util'
import { TOKEN_TRANSFER_FUNCTION_SIGNATURE } from '../send.constants'
function formShouldBeDisabled ({ inError, selectedToken, tokenBalance, gasTotal }) {
diff --git a/ui/app/components/send_/send-header/send-header.component.js b/ui/app/components/send_/send-header/send-header.component.js
index 99adfc7e8..30cb5c749 100644
--- a/ui/app/components/send_/send-header/send-header.component.js
+++ b/ui/app/components/send_/send-header/send-header.component.js
@@ -5,9 +5,9 @@ import PageContainerHeader from '../../page-container/page-container-header.comp
export default class SendHeader extends Component {
static propTypes = {
- isToken: PropTypes.bool,
clearSend: PropTypes.func,
goHome: PropTypes.func,
+ isToken: PropTypes.bool,
};
render () {
@@ -15,14 +15,14 @@ export default class SendHeader extends Component {
return (
<PageContainerHeader
- title={isToken ? this.context.t('sendTokens') : this.context.t('sendETH')}
- subtitle={this.context.t('onlySendToEtherAddress')}
onClose={() => {
clearSend()
goHome()
}}
+ subtitle={this.context.t('onlySendToEtherAddress')}
+ title={isToken ? this.context.t('sendTokens') : this.context.t('sendETH')}
/>
- );
+ )
}
}
diff --git a/ui/app/components/send_/send-header/send-header.container.js b/ui/app/components/send_/send-header/send-header.container.js
index a4d3ac54f..8eb2bbe2e 100644
--- a/ui/app/components/send_/send-header/send-header.container.js
+++ b/ui/app/components/send_/send-header/send-header.container.js
@@ -7,13 +7,13 @@ export default connect(mapStateToProps, mapDispatchToProps)(SendHeader)
function mapStateToProps (state) {
return {
- isToken: Boolean(getSelectedToken(state))
+ isToken: Boolean(getSelectedToken(state)),
}
}
function mapDispatchToProps (dispatch) {
return {
- goHome: () => dispatch(goHome()),
clearSend: () => dispatch(clearSend()),
+ goHome: () => dispatch(goHome()),
}
}
diff --git a/ui/app/components/send_/send.selectors.js b/ui/app/components/send_/send.selectors.js
index 4abebfa56..acce4afb7 100644
--- a/ui/app/components/send_/send.selectors.js
+++ b/ui/app/components/send_/send.selectors.js
@@ -29,8 +29,8 @@ const selectors = {
getSendEditingTransactionId,
getSendErrors,
getSendFrom,
- getSendFromObject,
getSendFromBalance,
+ getSendFromObject,
getSendMaxModeState,
getSendTo,
getSendToAccounts,
@@ -43,56 +43,38 @@ const selectors = {
module.exports = selectors
-function getSelectedAddress (state) {
- const selectedAddress = state.metamask.selectedAddress || Object.keys(state.metamask.accounts)[0]
-
- return selectedAddress
-}
-
-function getSelectedIdentity (state) {
- const selectedAddress = getSelectedAddress(state)
- const identities = state.metamask.identities
-
- return identities[selectedAddress]
-}
-
-function getSelectedAccount (state) {
- const accounts = state.metamask.accounts
- const selectedAddress = getSelectedAddress(state)
-
- return accounts[selectedAddress]
-}
+function accountsWithSendEtherInfoSelector (state) {
+ const {
+ accounts,
+ identities,
+ } = state.metamask
-function getSelectedToken (state) {
- const tokens = state.metamask.tokens || []
- const selectedTokenAddress = state.metamask.selectedTokenAddress
- const selectedToken = tokens.filter(({ address }) => address === selectedTokenAddress)[0]
- const sendToken = state.metamask.send.token
+ const accountsWithSendEtherInfo = Object.entries(accounts).map(([key, account]) => {
+ return Object.assign({}, account, identities[key])
+ })
- return selectedToken || sendToken || null
+ return accountsWithSendEtherInfo
}
-function getSelectedTokenExchangeRate (state) {
- const tokenExchangeRates = state.metamask.tokenExchangeRates
- const selectedToken = getSelectedToken(state) || {}
- const { symbol = '' } = selectedToken
-
- const pair = `${symbol.toLowerCase()}_eth`
- const { rate: tokenExchangeRate = 0 } = tokenExchangeRates[pair] || {}
+function autoAddToBetaUI (state) {
+ const autoAddTransactionThreshold = 12
+ const autoAddAccountsThreshold = 2
+ const autoAddTokensThreshold = 1
- return tokenExchangeRate
-}
+ const numberOfTransactions = state.metamask.selectedAddressTxList.length
+ const numberOfAccounts = Object.keys(state.metamask.accounts).length
+ const numberOfTokensAdded = state.metamask.tokens.length
-function getTokenExchangeRate (state, tokenSymbol) {
- const pair = `${tokenSymbol.toLowerCase()}_eth`
- const tokenExchangeRates = state.metamask.tokenExchangeRates
- const { rate: tokenExchangeRate = 0 } = tokenExchangeRates[pair] || {}
+ const userPassesThreshold = (numberOfTransactions > autoAddTransactionThreshold) &&
+ (numberOfAccounts > autoAddAccountsThreshold) &&
+ (numberOfTokensAdded > autoAddTokensThreshold)
+ const userIsNotInBeta = !state.metamask.featureFlags.betaUI
- return tokenExchangeRate
+ return userIsNotInBeta && userPassesThreshold
}
-function getUnapprovedTxs (state) {
- return state.metamask.unapprovedTxs
+function getAddressBook (state) {
+ return state.metamask.addressBook
}
function getConversionRate (state) {
@@ -103,25 +85,6 @@ function getConvertedCurrency (state) {
return state.metamask.currentCurrency
}
-function getAddressBook (state) {
- return state.metamask.addressBook
-}
-
-function accountsWithSendEtherInfoSelector (state) {
- const {
- accounts,
- identities,
- } = state.metamask
- console.log(`accountsWithSendEtherInfoSelector accounts`, accounts);
- console.log(`accountsWithSendEtherInfoSelector identities`, identities);
- const accountsWithSendEtherInfo = Object.entries(accounts).map(([key, account]) => {
- return Object.assign({}, account, identities[key])
- })
-
- console.log(`accountsWithSendEtherInfoSelector accountsWithSendEtherInfo`, accountsWithSendEtherInfo);
- return accountsWithSendEtherInfo
-}
-
function getCurrentAccountWithSendEtherInfo (state) {
const currentAddress = getSelectedAddress(state)
const accounts = accountsWithSendEtherInfoSelector(state)
@@ -129,61 +92,80 @@ function getCurrentAccountWithSendEtherInfo (state) {
return accounts.find(({ address }) => address === currentAddress)
}
-function transactionsSelector (state) {
- const { network, selectedTokenAddress } = state.metamask
- const unapprovedMsgs = valuesFor(state.metamask.unapprovedMsgs)
- const shapeShiftTxList = (network === '1') ? state.metamask.shapeShiftTxList : undefined
- const transactions = state.metamask.selectedAddressTxList || []
- const txsToRender = !shapeShiftTxList ? transactions.concat(unapprovedMsgs) : transactions.concat(unapprovedMsgs, shapeShiftTxList)
+function getCurrentCurrency (state) {
+ return state.metamask.currentCurrency
+}
- // console.log({txsToRender, selectedTokenAddress})
- return selectedTokenAddress
- ? txsToRender
- .filter(({ txParams }) => txParams && txParams.to === selectedTokenAddress)
- .sort((a, b) => b.time - a.time)
- : txsToRender
- .sort((a, b) => b.time - a.time)
+function getCurrentNetwork (state) {
+ return state.metamask.network
}
-function getGasPrice (state) {
- return state.metamask.send.gasPrice
+function getCurrentViewContext (state) {
+ const { currentView = {} } = state.appState
+ return currentView.context
}
-function getGasTotal (state) {
- return state.metamask.send.gasTotal
+function getForceGasMin (state) {
+ return state.metamask.send.forceGasMin
+}
+
+function getGasPrice (state) {
+ return state.metamask.send.gasPrice
}
function getGasLimit (state) {
return state.metamask.send.gasLimit
}
-function getForceGasMin (state) {
- return state.metamask.send.forceGasMin
+function getGasTotal (state) {
+ return state.metamask.send.gasTotal
}
-function getSendFrom (state) {
- return state.metamask.send.from
+function getSelectedAccount (state) {
+ const accounts = state.metamask.accounts
+ const selectedAddress = getSelectedAddress(state)
+
+ return accounts[selectedAddress]
}
-function getSendFromObject (state) {
- return getSendFrom(state) || getCurrentAccountWithSendEtherInfo(state)
+function getSelectedAddress (state) {
+ const selectedAddress = state.metamask.selectedAddress || Object.keys(state.metamask.accounts)[0]
+
+ return selectedAddress
}
-function getSendFromBalance (state) {
- const from = getSendFrom(state) || getSelectedAccount(state)
- return from.balance
+function getSelectedIdentity (state) {
+ const selectedAddress = getSelectedAddress(state)
+ const identities = state.metamask.identities
+
+ return identities[selectedAddress]
}
-function getSendAmount (state) {
- return state.metamask.send.amount
+function getSelectedToken (state) {
+ const tokens = state.metamask.tokens || []
+ const selectedTokenAddress = state.metamask.selectedTokenAddress
+ const selectedToken = tokens.filter(({ address }) => address === selectedTokenAddress)[0]
+ const sendToken = state.metamask.send.token
+
+ return selectedToken || sendToken || null
}
-function getSendMaxModeState (state) {
- return state.metamask.send.maxModeOn
+function getSelectedTokenContract (state) {
+ const selectedToken = getSelectedToken(state)
+ return selectedToken
+ ? global.eth.contract(abi).at(selectedToken.address)
+ : null
}
-function getCurrentCurrency (state) {
- return state.metamask.currentCurrency
+function getSelectedTokenExchangeRate (state) {
+ const tokenExchangeRates = state.metamask.tokenExchangeRates
+ const selectedToken = getSelectedToken(state) || {}
+ const { symbol = '' } = selectedToken
+
+ const pair = `${symbol.toLowerCase()}_eth`
+ const { rate: tokenExchangeRate = 0 } = tokenExchangeRates[pair] || {}
+
+ return tokenExchangeRate
}
function getSelectedTokenToFiatRate (state) {
@@ -199,51 +181,39 @@ function getSelectedTokenToFiatRate (state) {
return tokenToFiatRate
}
-function getSelectedTokenContract (state) {
- const selectedToken = getSelectedToken(state)
- return selectedToken
- ? global.eth.contract(abi).at(selectedToken.address)
- : null
+function getSendAmount (state) {
+ return state.metamask.send.amount
}
-function autoAddToBetaUI (state) {
- const autoAddTransactionThreshold = 12
- const autoAddAccountsThreshold = 2
- const autoAddTokensThreshold = 1
-
- const numberOfTransactions = state.metamask.selectedAddressTxList.length
- const numberOfAccounts = Object.keys(state.metamask.accounts).length
- const numberOfTokensAdded = state.metamask.tokens.length
+function getSendEditingTransactionId (state) {
+ return state.metamask.send.editingTransactionId
+}
- const userPassesThreshold = (numberOfTransactions > autoAddTransactionThreshold) &&
- (numberOfAccounts > autoAddAccountsThreshold) &&
- (numberOfTokensAdded > autoAddTokensThreshold)
- const userIsNotInBeta = !state.metamask.featureFlags.betaUI
+function getSendErrors (state) {
+ return state.metamask.send.errors
+}
- return userIsNotInBeta && userPassesThreshold
+function getSendFrom (state) {
+ return state.metamask.send.from
}
-function getCurrentViewContext (state) {
- const { currentView = {} } = state.appState
- return currentView.context
+function getSendFromBalance (state) {
+ const from = getSendFrom(state) || getSelectedAccount(state)
+ return from.balance
}
-function getSendEditingTransactionId (state) {
- return state.metamask.send.editingTransactionId
+function getSendFromObject (state) {
+ return getSendFrom(state) || getCurrentAccountWithSendEtherInfo(state)
}
-function getSendErrors (state) {
- return state.metamask.send.errors
+function getSendMaxModeState (state) {
+ return state.metamask.send.maxModeOn
}
function getSendTo (state) {
return state.metamask.send.to
}
-function getTokenBalance (state) {
- return state.metamask.send.tokenBalance
-}
-
function getSendToAccounts (state) {
const fromAccounts = accountsWithSendEtherInfoSelector(state)
const addressBookAccounts = getAddressBook(state)
@@ -252,11 +222,38 @@ function getSendToAccounts (state) {
return Object.entries(allAccounts).map(([key, account]) => account)
}
-function getCurrentNetwork (state) {
- return state.metamask.network
+function getTokenBalance (state) {
+ return state.metamask.send.tokenBalance
+}
+
+function getTokenExchangeRate (state, tokenSymbol) {
+ const pair = `${tokenSymbol.toLowerCase()}_eth`
+ const tokenExchangeRates = state.metamask.tokenExchangeRates
+ const { rate: tokenExchangeRate = 0 } = tokenExchangeRates[pair] || {}
+
+ return tokenExchangeRate
+}
+
+function getUnapprovedTxs (state) {
+ return state.metamask.unapprovedTxs
}
function isSendFormInError (state) {
const { amount, to } = getSendErrors(state)
- return Boolean(amount || toError !== null)
-} \ No newline at end of file
+ return Boolean(amount || to !== null)
+}
+
+function transactionsSelector (state) {
+ const { network, selectedTokenAddress } = state.metamask
+ const unapprovedMsgs = valuesFor(state.metamask.unapprovedMsgs)
+ const shapeShiftTxList = (network === '1') ? state.metamask.shapeShiftTxList : undefined
+ const transactions = state.metamask.selectedAddressTxList || []
+ const txsToRender = !shapeShiftTxList ? transactions.concat(unapprovedMsgs) : transactions.concat(unapprovedMsgs, shapeShiftTxList)
+
+ return selectedTokenAddress
+ ? txsToRender
+ .filter(({ txParams }) => txParams && txParams.to === selectedTokenAddress)
+ .sort((a, b) => b.time - a.time)
+ : txsToRender
+ .sort((a, b) => b.time - a.time)
+}
diff --git a/ui/app/components/send_/send.utils.js b/ui/app/components/send_/send.utils.js
index f56f91e48..f289ea989 100644
--- a/ui/app/components/send_/send.utils.js
+++ b/ui/app/components/send_/send.utils.js
@@ -8,13 +8,21 @@ const {
calcTokenAmount,
} = require('../../token-util')
+function getGasTotal (gasLimit, gasPrice) {
+ return multiplyCurrencies(gasLimit, gasPrice, {
+ toNumericBase: 'hex',
+ multiplicandBase: 16,
+ multiplierBase: 16,
+ })
+}
+
function isBalanceSufficient ({
amount = '0x0',
- gasTotal = '0x0',
- balance,
- primaryCurrency,
amountConversionRate,
+ balance,
conversionRate,
+ gasTotal = '0x0',
+ primaryCurrency,
}) {
const totalAmount = addCurrencies(amount, gasTotal, {
aBase: 16,
@@ -63,16 +71,8 @@ function isTokenBalanceSufficient ({
return tokenBalanceIsSufficient
}
-function getGasTotal (gasLimit, gasPrice) {
- return multiplyCurrencies(gasLimit, gasPrice, {
- toNumericBase: 'hex',
- multiplicandBase: 16,
- multiplierBase: 16,
- })
-}
-
module.exports = {
getGasTotal,
isBalanceSufficient,
isTokenBalanceSufficient,
-} \ No newline at end of file
+}
diff --git a/ui/app/ducks/send.js b/ui/app/ducks/send.js
index c4874aa8c..e0feb9f06 100644
--- a/ui/app/ducks/send.js
+++ b/ui/app/ducks/send.js
@@ -1,10 +1,10 @@
import extend from 'xtend'
// Actions
-const OPEN_FROM_DROPDOWN = 'metamask/send/OPEN_FROM_DROPDOWN';
-const CLOSE_FROM_DROPDOWN = 'metamask/send/CLOSE_FROM_DROPDOWN';
-const OPEN_TO_DROPDOWN = 'metamask/send/OPEN_TO_DROPDOWN';
-const CLOSE_TO_DROPDOWN = 'metamask/send/CLOSE_TO_DROPDOWN';
+const OPEN_FROM_DROPDOWN = 'metamask/send/OPEN_FROM_DROPDOWN'
+const CLOSE_FROM_DROPDOWN = 'metamask/send/CLOSE_FROM_DROPDOWN'
+const OPEN_TO_DROPDOWN = 'metamask/send/OPEN_TO_DROPDOWN'
+const CLOSE_TO_DROPDOWN = 'metamask/send/CLOSE_TO_DROPDOWN'
// TODO: determine if this approach to initState is consistent with conventional ducks pattern
const initState = {
@@ -14,7 +14,7 @@ const initState = {
}
// Reducer
-export default function reducer({ send: sendState = initState }, action = {}) {
+export default function reducer ({ send: sendState = initState }, action = {}) {
switch (action.type) {
case OPEN_FROM_DROPDOWN:
return extend(sendState, {
@@ -38,18 +38,18 @@ export default function reducer({ send: sendState = initState }, action = {}) {
}
// Action Creators
-export function openFromDropdown() {
- return { type: OPEN_FROM_DROPDOWN };
+export function openFromDropdown () {
+ return { type: OPEN_FROM_DROPDOWN }
}
-export function closeFromDropdown() {
- return { type: CLOSE_FROM_DROPDOWN };
+export function closeFromDropdown () {
+ return { type: CLOSE_FROM_DROPDOWN }
}
-export function openToDropdown() {
- return { type: OPEN_TO_DROPDOWN };
+export function openToDropdown () {
+ return { type: OPEN_TO_DROPDOWN }
}
-export function closeToDropdown() {
- return { type: CLOSE_TO_DROPDOWN };
-} \ No newline at end of file
+export function closeToDropdown () {
+ return { type: CLOSE_TO_DROPDOWN }
+}
diff --git a/ui/app/selectors.js b/ui/app/selectors.js
index 60cc264da..a29294b86 100644
--- a/ui/app/selectors.js
+++ b/ui/app/selectors.js
@@ -185,4 +185,4 @@ function autoAddToBetaUI (state) {
function getCurrentViewContext (state) {
const { currentView = {} } = state.appState
return currentView.context
-} \ No newline at end of file
+}
diff --git a/ui/app/send-v2.js b/ui/app/send-v2.js
index 12e8b4e60..efe06ee64 100644
--- a/ui/app/send-v2.js
+++ b/ui/app/send-v2.js
@@ -3,23 +3,8 @@ const PropTypes = require('prop-types')
const PersistentForm = require('../lib/persistent-form')
const h = require('react-hyperscript')
-const ethAbi = require('ethereumjs-abi')
-const ethUtil = require('ethereumjs-util')
-
-const FromDropdown = require('./components/send/from-dropdown')
-const EnsInput = require('./components/ens-input')
-const CurrencyDisplay = require('./components/send/currency-display')
-const MemoTextArea = require('./components/send/memo-textarea')
-const GasFeeDisplay = require('./components/send/gas-fee-display-v2')
-
-const {
- TOKEN_TRANSFER_FUNCTION_SIGNATURE,
-} = require('./components/send/send-constants')
-
const {
- multiplyCurrencies,
conversionGreaterThan,
- subtractCurrencies,
} = require('./conversion-util')
const {
calcTokenAmount,
@@ -29,8 +14,6 @@ const {
isTokenBalanceSufficient,
getGasTotal,
} = require('./components/send/send-utils')
-const { isValidAddress } = require('./util')
-const { CONFIRM_TRANSACTION_ROUTE, DEFAULT_ROUTE } = require('./routes')
import PageContainer from './components/page-container/page-container.component'
import SendHeader from './components/send_/send-header/send-header.container'