1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Lint fixes and alphabetization for i3725-refactor-send-component

This commit is contained in:
Dan 2018-04-26 22:08:14 -02:30
parent 8ff7806f1b
commit 91c201aa72
35 changed files with 368 additions and 403 deletions

View File

@ -12,7 +12,7 @@ export default class PageContainerContent extends Component {
<div className="page-container__content"> <div className="page-container__content">
{this.props.children} {this.props.children}
</div> </div>
); )
} }
} }

View File

@ -31,7 +31,7 @@ export default class PageContainerFooter extends Component {
</button> </button>
</div> </div>
); )
} }
} }

View File

@ -29,7 +29,7 @@ export default class PageContainerHeader extends Component {
/> />
</div> </div>
); )
} }
} }

View File

@ -8,12 +8,11 @@ export default class PageContainer extends Component {
}; };
render () { render () {
console.log(`QQQQQQQQQQQQQQQQQ this.props.children`, this.props.children);
return ( return (
<div className="page-container"> <div className="page-container">
{this.props.children} {this.props.children}
</div> </div>
); )
} }
} }

View File

@ -19,14 +19,14 @@ export default class AccountListItem extends Component {
render () { render () {
const { const {
className,
account, account,
handleClick, className,
icon = null,
conversionRate, conversionRate,
currentCurrency, currentCurrency,
displayBalance = true,
displayAddress = false, displayAddress = false,
displayBalance = true,
handleClick,
icon = null,
} = this.props } = this.props
const { name, address, balance } = account || {} const { name, address, balance } = account || {}
@ -36,32 +36,32 @@ export default class AccountListItem extends Component {
onClick={() => handleClick({ name, address, balance })} onClick={() => handleClick({ name, address, balance })}
> >
<div className='account-list-item__top-row'> <div className="account-list-item__top-row">
<Identicon <Identicon
address={address} address={address}
className="account-list-item__identicon"
diameter={18} 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> </div>
{displayAddress && name && <div className='account-list-item__account-address'> {displayAddress && name && <div className="account-list-item__account-address">
{ checksumAddress(address) } { checksumAddress(address) }
</div>} </div>}
{displayBalance && <CurrencyDisplay {displayBalance && <CurrencyDisplay
primaryCurrency='ETH' className="account-list-item__account-balances"
convertedCurrency={currentCurrency}
value={balance}
conversionRate={conversionRate} conversionRate={conversionRate}
convertedBalanceClassName="account-list-item__account-secondary-balance"
convertedCurrency={currentCurrency}
primaryBalanceClassName="account-list-item__account-primary-balance"
primaryCurrency="ETH"
readOnly={true} readOnly={true}
className='account-list-item__account-balances' value={balance}
primaryBalanceClassName='account-list-item__account-primary-balance'
convertedBalanceClassName='account-list-item__account-secondary-balance'
/>} />}
</div>) </div>)

View File

@ -4,29 +4,29 @@ import PropTypes from 'prop-types'
export default class AmountMaxButton extends Component { export default class AmountMaxButton extends Component {
static propTypes = { static propTypes = {
tokenBalance: PropTypes.string,
gasTotal: PropTypes.string,
balance: PropTypes.string, balance: PropTypes.string,
gasTotal: PropTypes.string,
maxModeOn: PropTypes.bool,
selectedToken: PropTypes.object, selectedToken: PropTypes.object,
setAmountToMax: PropTypes.func, setAmountToMax: PropTypes.func,
setMaxModeTo: PropTypes.func, setMaxModeTo: PropTypes.func,
maxModeOn: PropTypes.bool, tokenBalance: PropTypes.string,
}; };
setAmountToMax = function () { setAmountToMax = function () {
const { const {
balance, balance,
tokenBalance,
selectedToken,
gasTotal, gasTotal,
selectedToken,
setAmountToMax, setAmountToMax,
tokenBalance,
} = this.props } = this.props
setAmountToMax({ setAmountToMax({
tokenBalance, balance,
selectedToken,
gasTotal, gasTotal,
setAmountToMax, selectedToken,
tokenBalance,
}) })
} }
@ -35,7 +35,7 @@ export default class AmountMaxButton extends Component {
return ( return (
<div <div
className='send-v2__amount-max' className="send-v2__amount-max"
onClick={(event) => { onClick={(event) => {
event.preventDefault() event.preventDefault()
setMaxModeTo(true) setMaxModeTo(true)
@ -44,7 +44,7 @@ export default class AmountMaxButton extends Component {
> >
{!maxModeOn ? this.context.t('max') : ''} {!maxModeOn ? this.context.t('max') : ''}
</div> </div>
); )
} }
} }

View File

@ -1,28 +1,29 @@
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { import {
getSelectedToken,
getGasTotal, getGasTotal,
getTokenBalance, getSelectedToken,
getSendFromBalance, getSendFromBalance,
getTokenBalance,
} from '../../../send.selectors.js' } from '../../../send.selectors.js'
import { getMaxModeOn } from '../send-amount-row.selectors.js' import { getMaxModeOn } from '../send-amount-row.selectors.js'
import { calcMaxAmount } from './amount-max-button.utils.js' import { calcMaxAmount } from './amount-max-button.utils.js'
import { import {
updateSendAmount, updateSendAmount,
updateSendErrors,
setMaxModeTo, setMaxModeTo,
} from '../../../actions' } from '../../../actions'
import AmountMaxButton from './amount-max-button.component' import AmountMaxButton from './amount-max-button.component'
export default connect(mapStateToProps, mapDispatchToProps)(SendToRow) export default connect(mapStateToProps, mapDispatchToProps)(AmountMaxButton)
function mapStateToProps (state) { function mapStateToProps (state) {
return { return {
selectedToken: getSelectedToken(state),
maxModeOn: getMaxModeOn(state),
gasTotal: getGasTotal(state),
tokenBalance: getTokenBalance(state),
balance: getSendFromBalance(state), balance: getSendFromBalance(state),
gasTotal: getGasTotal(state),
maxModeOn: getMaxModeOn(state),
selectedToken: getSelectedToken(state),
tokenBalance: getTokenBalance(state),
} }
} }
@ -31,7 +32,7 @@ function mapDispatchToProps (dispatch) {
setAmountToMax: maxAmountDataObject => { setAmountToMax: maxAmountDataObject => {
updateSendErrors({ amount: null }) updateSendErrors({ amount: null })
updateSendAmount(calcMaxAmount(maxAmountDataObject)) updateSendAmount(calcMaxAmount(maxAmountDataObject))
} },
setMaxModeTo: bool => dispatch(setMaxModeTo(bool)), setMaxModeTo: bool => dispatch(setMaxModeTo(bool)),
} }
} }

View File

@ -18,5 +18,5 @@ function calcMaxAmount ({ balance, gasTotal, selectedToken, tokenBalance }) {
} }
module.exports = { module.exports = {
calcMaxAmount calcMaxAmount,
} }

View File

@ -7,22 +7,26 @@ import CurrencyDisplay from '../../../send/currency-display'
export default class SendAmountRow extends Component { export default class SendAmountRow extends Component {
static propTypes = { static propTypes = {
amount: PropTypes.string,
amountConversionRate: PropTypes.number, amountConversionRate: PropTypes.number,
balance: PropTypes.string,
conversionRate: PropTypes.number, conversionRate: PropTypes.number,
convertedCurrency: PropTypes.string,
gasTotal: PropTypes.string, gasTotal: PropTypes.string,
inError: PropTypes.bool,
primaryCurrency: PropTypes.string, primaryCurrency: PropTypes.string,
selectedToken: PropTypes.object, selectedToken: PropTypes.object,
setMaxModeTo: PropTypes.func,
tokenBalance: PropTypes.string, tokenBalance: PropTypes.string,
updateSendAmountError: PropTypes.func,
updateSendAmount: PropTypes.func, updateSendAmount: PropTypes.func,
setMaxModeTo: PropTypes.func updateSendAmountError: PropTypes.func,
} }
validateAmount (amount) { validateAmount (amount) {
const { const {
amountConversionRate, amountConversionRate,
conversionRate,
balance, balance,
conversionRate,
gasTotal, gasTotal,
primaryCurrency, primaryCurrency,
selectedToken, selectedToken,
@ -55,9 +59,8 @@ export default class SendAmountRow extends Component {
amount, amount,
amountConversionRate, amountConversionRate,
convertedCurrency, convertedCurrency,
inError,
gasTotal, gasTotal,
maxModeOn, inError,
primaryCurrency = 'ETH', primaryCurrency = 'ETH',
selectedToken, selectedToken,
} = this.props } = this.props
@ -70,16 +73,16 @@ export default class SendAmountRow extends Component {
> >
{!inError && gasTotal && <AmountMaxButton />} {!inError && gasTotal && <AmountMaxButton />}
<CurrencyDisplay <CurrencyDisplay
conversionRate={amountConversionRate}
convertedCurrency={convertedCurrency}
handleChange={newAmount => this.handleAmountChange(newAmount)}
inError={inError} inError={inError}
primaryCurrency={primaryCurrency} primaryCurrency={primaryCurrency}
convertedCurrency={convertedCurrency}
selectedToken={selectedToken} selectedToken={selectedToken}
value={amount || '0x0'} value={amount || '0x0'}
conversionRate={amountConversionRate}
handleChange={newAmount => this.handleAmountChange(newAmount)}
/> />
</SendRowWrapper> </SendRowWrapper>
); )
} }
} }

View File

@ -1,24 +1,22 @@
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { import {
getSelectedToken,
getConvertedCurrency,
getSendAmount,
getGasTotal,
getSelectedBalance,
getTokenBalance,
getSendFromBalance,
getConversionRate, getConversionRate,
getConvertedCurrency,
getGasTotal,
getSelectedToken,
getSendAmount,
getSendFromBalance,
getTokenBalance,
} from '../../send.selectors.js' } from '../../send.selectors.js'
import { import {
getMaxModeOn,
sendAmountIsInError,
getPrimaryCurrency,
getAmountConversionRate, getAmountConversionRate,
getPrimaryCurrency,
sendAmountIsInError,
} from './send-amount-row.selectors.js' } from './send-amount-row.selectors.js'
import { getAmountErrorObject } from './send-amount-row.utils.js' import { getAmountErrorObject } from './send-amount-row.utils.js'
import { import {
updateSendAmount,
setMaxModeTo, setMaxModeTo,
updateSendAmount,
updateSendErrors, updateSendErrors,
} from '../../../../actions' } from '../../../../actions'
import SendAmountRow from './send-amount-row.component' import SendAmountRow from './send-amount-row.component'
@ -27,26 +25,25 @@ export default connect(mapStateToProps, mapDispatchToProps)(SendAmountRow)
function mapStateToProps (state) { function mapStateToProps (state) {
return { return {
selectedToken: getSelectedToken(state),
primaryCurrency: getPrimaryCurrency(state),
convertedCurrency: getConvertedCurrency(state),
amountConversionRate: getAmountConversionRate(state),
inError: sendAmountIsInError(state),
amount: getSendAmount(state), amount: getSendAmount(state),
maxModeOn: getMaxModeOn(state), amountConversionRate: getAmountConversionRate(state),
gasTotal: getGasTotal(state),
tokenBalance: getTokenBalance(state),
balance: getSendFromBalance(state), balance: getSendFromBalance(state),
conversionRate: getConversionRate(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) { function mapDispatchToProps (dispatch) {
return { return {
setMaxModeTo: bool => dispatch(setMaxModeTo(bool)),
updateSendAmount: newAmount => dispatch(updateSendAmount(newAmount)),
updateSendAmountError: (amountDataObject) => { updateSendAmountError: (amountDataObject) => {
dispatch(updateSendErrors(getAmountErrorObject(amountDataObject))) dispatch(updateSendErrors(getAmountErrorObject(amountDataObject)))
}, },
updateSendAmount: newAmount => dispatch(updateSendAmount(newAmount)),
setMaxModeTo: bool => dispatch(setMaxModeTo(bool)),
} }
} }

View File

@ -5,10 +5,10 @@ import {
} from '../../send.selectors.js' } from '../../send.selectors.js'
const selectors = { const selectors = {
getMaxModeOn,
sendAmountIsInError,
getPrimaryCurrency,
getAmountConversionRate, getAmountConversionRate,
getMaxModeOn,
getPrimaryCurrency,
sendAmountIsInError,
} }
module.exports = selectors module.exports = selectors
@ -27,7 +27,7 @@ function getPrimaryCurrency (state) {
} }
function getAmountConversionRate (state) { function getAmountConversionRate (state) {
return Boolean(getSelectedToken(state)) return getSelectedToken(state)
? getSelectedTokenToFiatRate(state) ? getSelectedTokenToFiatRate(state)
: getConversionRate(state) : getConversionRate(state)
} }

View File

@ -1,4 +1,3 @@
const { isValidAddress } = require('../../../../util')
const { const {
conversionGreaterThan, conversionGreaterThan,
} = require('../../../../conversion-util') } = require('../../../../conversion-util')
@ -9,31 +8,23 @@ const {
function getAmountErrorObject ({ function getAmountErrorObject ({
amount, amount,
balance,
amountConversionRate, amountConversionRate,
balance,
conversionRate, conversionRate,
gasTotal,
primaryCurrency, primaryCurrency,
selectedToken, selectedToken,
gasTotal,
tokenBalance, 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 let insufficientFunds = false
if (gasTotal && conversionRate) { if (gasTotal && conversionRate) {
insufficientFunds = !isBalanceSufficient({ insufficientFunds = !isBalanceSufficient({
amount: selectedToken ? '0x0' : amount, amount: selectedToken ? '0x0' : amount,
gasTotal,
balance,
primaryCurrency,
amountConversionRate, amountConversionRate,
balance,
conversionRate, conversionRate,
gasTotal,
primaryCurrency,
}) })
} }
@ -66,5 +57,5 @@ function getAmountErrorObject ({
} }
module.exports = { module.exports = {
getAmountErrorObject getAmountErrorObject,
} }

View File

@ -1,24 +1,23 @@
import React, { Component } from 'react' import React, { Component } from 'react'
import PageContainerContent from '../../page-container/page-container-content.component' 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 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 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 { export default class SendContent extends Component {
render () { render () {
console.log('111222333444555666777888999')
return ( return (
<PageContainerContent> <PageContainerContent>
<div className='.send-v2__form'> <div className=".send-v2__form">
<SendFromRow /> <SendFromRow />
<SendToRow /> <SendToRow />
<SendAmountRow /> <SendAmountRow />
<SendGasRow /> <SendGasRow />
</div> </div>
</PageContainerContent> </PageContainerContent>
); )
} }
} }

View File

@ -26,25 +26,26 @@ export default class FromDropdown extends Component {
renderDropdown () { renderDropdown () {
const { const {
accounts, accounts,
selectedAccount,
closeDropdown, closeDropdown,
onSelect, onSelect,
selectedAccount,
} = this.props } = this.props
return (<div> return (<div>
<div <div
className='send-v2__from-dropdown__close-area' className="send-v2__from-dropdown__close-area"
onClick={() => closeDropdown} onClick={() => closeDropdown}
/> />
<div className='send-v2__from-dropdown__list'> <div className="send-v2__from-dropdown__list">
{...accounts.map(account => <AccountListItem {...accounts.map((account, index) => <AccountListItem
className='account-list-item__dropdown'
account={account} account={account}
className="account-list-item__dropdown"
handleClick={() => { handleClick={() => {
onSelect(account) onSelect(account)
closeDropdown() closeDropdown()
}} }}
icon={this.getListItemIcon(account, selectedAccount.address)} icon={this.getListItemIcon(account, selectedAccount.address)}
key={`from-dropdown-account-#${index}`}
/>)} />)}
</div> </div>
</div>) </div>)
@ -52,13 +53,12 @@ export default class FromDropdown extends Component {
render () { render () {
const { const {
selectedAccount,
openDropdown,
dropdownOpen, dropdownOpen,
openDropdown,
selectedAccount,
} = this.props } = 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 <AccountListItem
account={selectedAccount} account={selectedAccount}
handleClick={openDropdown} handleClick={openDropdown}

View File

@ -33,28 +33,27 @@ export default class SendFromRow extends Component {
render () { render () {
const { const {
closeFromDropdown,
conversionRate,
from, from,
fromAccounts, fromAccounts,
conversionRate,
fromDropdownOpen, fromDropdownOpen,
tokenContract,
openFromDropdown, openFromDropdown,
closeFromDropdown,
} = this.props } = this.props
console.log(`$% SendFromRow fromAccounts`, fromAccounts);
return ( return (
<SendRowWrapper label={`${this.context.t('from')}:`}> <SendRowWrapper label={`${this.context.t('from')}:`}>
<FromDropdown <FromDropdown
dropdownOpen={fromDropdownOpen}
accounts={fromAccounts} accounts={fromAccounts}
selectedAccount={from}
onSelect={newFrom => this.handleFromChange(newFrom)}
openDropdown={() => openFromDropdown()}
closeDropdown={() => closeFromDropdown()} closeDropdown={() => closeFromDropdown()}
conversionRate={conversionRate} conversionRate={conversionRate}
dropdownOpen={fromDropdownOpen}
onSelect={newFrom => this.handleFromChange(newFrom)}
openDropdown={() => openFromDropdown()}
selectedAccount={from}
/> />
</SendRowWrapper> </SendRowWrapper>
); )
} }
} }

View File

@ -1,8 +1,8 @@
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { import {
accountsWithSendEtherInfoSelector,
getConversionRate, getConversionRate,
getSelectedTokenContract, getSelectedTokenContract,
accountsWithSendEtherInfoSelector,
getSendFromObject, getSendFromObject,
} from '../../send.selectors.js' } from '../../send.selectors.js'
import { import {
@ -10,23 +10,22 @@ import {
} from './send-from-row.selectors.js' } from './send-from-row.selectors.js'
import { calcTokenUpdateAmount } from './send-from-row.utils.js' import { calcTokenUpdateAmount } from './send-from-row.utils.js'
import { import {
updateSendTokenBalance,
updateSendFrom, updateSendFrom,
updateSendTokenBalance,
} from '../../../../actions' } from '../../../../actions'
import { import {
openFromDropdown,
closeFromDropdown, closeFromDropdown,
openFromDropdown,
} from '../../../../ducks/send' } from '../../../../ducks/send'
import SendFromRow from './send-from-row.component' import SendFromRow from './send-from-row.component'
export default connect(mapStateToProps, mapDispatchToProps)(SendFromRow) export default connect(mapStateToProps, mapDispatchToProps)(SendFromRow)
function mapStateToProps (state) { function mapStateToProps (state) {
console.log(`$% mapStateToProps accountsWithSendEtherInfoSelector`, accountsWithSendEtherInfoSelector);
return { return {
conversionRate: getConversionRate(state),
from: getSendFromObject(state), from: getSendFromObject(state),
fromAccounts: accountsWithSendEtherInfoSelector(state), fromAccounts: accountsWithSendEtherInfoSelector(state),
conversionRate: getConversionRate(state),
fromDropdownOpen: getFromDropdownOpen(state), fromDropdownOpen: getFromDropdownOpen(state),
tokenContract: getSelectedTokenContract(state), tokenContract: getSelectedTokenContract(state),
} }
@ -34,14 +33,14 @@ function mapStateToProps (state) {
function mapDispatchToProps (dispatch) { function mapDispatchToProps (dispatch) {
return { return {
closeFromDropdown: () => dispatch(closeFromDropdown()),
openFromDropdown: () => dispatch(openFromDropdown()),
updateSendFrom: newFrom => dispatch(updateSendFrom(newFrom)),
updateSendTokenBalance: (usersToken, selectedToken) => { updateSendTokenBalance: (usersToken, selectedToken) => {
if (!usersToken) return if (!usersToken) return
const tokenBalance = calcTokenUpdateAmount(selectedToken, selectedToken) const tokenBalance = calcTokenUpdateAmount(selectedToken, selectedToken)
dispatch(updateSendTokenBalance(tokenBalance)) dispatch(updateSendTokenBalance(tokenBalance))
}, },
updateSendFrom: newFrom => dispatch(updateSendFrom(newFrom)),
openFromDropdown: () => dispatch(openFromDropdown()),
closeFromDropdown: () => dispatch(closeFromDropdown()),
} }
} }

View File

@ -8,5 +8,5 @@ function calcTokenUpdateAmount (usersToken, selectedToken) {
} }
module.exports = { module.exports = {
calcTokenUpdateAmount calcTokenUpdateAmount,
} }

View File

@ -8,20 +8,23 @@ export default class SendGasRow extends Component {
static propTypes = { static propTypes = {
closeFromDropdown: PropTypes.func, closeFromDropdown: PropTypes.func,
conversionRate: PropTypes.number, conversionRate: PropTypes.number,
convertedCurrency: PropTypes.string,
from: PropTypes.string, from: PropTypes.string,
fromAccounts: PropTypes.array, fromAccounts: PropTypes.array,
fromDropdownOpen: PropTypes.bool, fromDropdownOpen: PropTypes.bool,
gasLoadingError: PropTypes.bool,
gasTotal: PropTypes.string,
openFromDropdown: PropTypes.func, openFromDropdown: PropTypes.func,
showCustomizeGasModal: PropTypes.bool,
tokenContract: PropTypes.object, tokenContract: PropTypes.object,
updateSendFrom: PropTypes.func, updateSendFrom: PropTypes.func,
updateSendTokenBalance: PropTypes.func, updateSendTokenBalance: PropTypes.func,
gasLoadingError: PropTypes.bool,
}; };
async handleFromChange (newFrom) { async handleFromChange (newFrom) {
const { const {
updateSendFrom,
tokenContract, tokenContract,
updateSendFrom,
updateSendTokenBalance, updateSendTokenBalance,
} = this.props } = this.props
@ -36,22 +39,22 @@ export default class SendGasRow extends Component {
const { const {
conversionRate, conversionRate,
convertedCurrency, convertedCurrency,
showCustomizeGasModal,
gasTotal,
gasLoadingError, gasLoadingError,
gasTotal,
showCustomizeGasModal,
} = this.props } = this.props
return ( return (
<SendRowWrapper label={`${this.context.t('gasFee')}:`}> <SendRowWrapper label={`${this.context.t('gasFee')}:`}>
<GasFeeDisplay <GasFeeDisplay
gasTotal={gasTotal}
conversionRate={conversionRate} conversionRate={conversionRate}
convertedCurrency={convertedCurrency} convertedCurrency={convertedCurrency}
onClick={() => showCustomizeGasModal()}
gasLoadingError={gasLoadingError} gasLoadingError={gasLoadingError}
gasTotal={gasTotal}
onClick={() => showCustomizeGasModal()}
/> />
</SendRowWrapper> </SendRowWrapper>
); )
} }
} }

View File

@ -14,9 +14,9 @@ export default class SendRowErrorMessage extends Component {
return ( return (
errorMessage errorMessage
? <div className='send-v2__error'>{this.context.t(errorMessage)}</div> ? <div className="send-v2__error">{this.context.t(errorMessage)}</div>
: null : null
); )
} }
} }

View File

@ -5,22 +5,22 @@ import SendRowErrorMessage from './send-row-error-message/send-row-error-message
export default class SendRowWrapper extends Component { export default class SendRowWrapper extends Component {
static propTypes = { static propTypes = {
label: PropTypes.string,
showError: PropTypes.bool,
children: PropTypes.node, children: PropTypes.node,
errorType: PropTypes.string, errorType: PropTypes.string,
label: PropTypes.string,
showError: PropTypes.bool,
}; };
render () { render () {
const { const {
label, children,
errorType = '', errorType = '',
showError = false, label,
children, showError = false,
} = this.props } = this.props
let formField = Array.isArray(children) ? children[1] || children[0] : children const formField = Array.isArray(children) ? children[1] || children[0] : children
let customLabelContent = children.length === 1 ? children[0] : null const customLabelContent = children.length === 1 ? children[0] : null
return ( return (
<div className="send-v2__form-row"> <div className="send-v2__form-row">
@ -33,7 +33,7 @@ export default class SendRowWrapper extends Component {
{formField} {formField}
</div> </div>
</div> </div>
); )
} }
} }

View File

@ -6,15 +6,15 @@ import EnsInput from '../../../ens-input'
export default class SendToRow extends Component { export default class SendToRow extends Component {
static propTypes = { static propTypes = {
closeToDropdown: PropTypes.func,
inError: PropTypes.bool,
network: PropTypes.string,
openToDropdown: PropTypes.func,
to: PropTypes.string, to: PropTypes.string,
toAccounts: PropTypes.array, toAccounts: PropTypes.array,
toDropdownOpen: PropTypes.bool, toDropdownOpen: PropTypes.bool,
inError: PropTypes.bool,
updateSendTo: PropTypes.func, updateSendTo: PropTypes.func,
updateSendToError: PropTypes.func, updateSendToError: PropTypes.func,
openToDropdown: PropTypes.func,
closeToDropdown: PropTypes.func,
network: PropTypes.string,
}; };
handleToChange (to, nickname = '') { handleToChange (to, nickname = '') {
@ -25,40 +25,35 @@ export default class SendToRow extends Component {
render () { render () {
const { const {
from,
fromAccounts,
toAccounts,
conversionRate,
fromDropdownOpen,
tokenContract,
openToDropdown,
closeToDropdown, closeToDropdown,
network,
inError, inError,
network,
openToDropdown,
to, to,
toAccounts,
toDropdownOpen, toDropdownOpen,
} = this.props } = this.props
return ( return (
<SendRowWrapper <SendRowWrapper
errorType={'to'}
label={`${this.context.t('to')}:`} label={`${this.context.t('to')}:`}
showError={inError} showError={inError}
errorType={'to'}
> >
<EnsInput <EnsInput
name={'address'}
placeholder={this.context.t('recipientAddress')}
network={network}
to={to}
accounts={toAccounts} accounts={toAccounts}
dropdownOpen={toDropdownOpen}
openDropdown={() => openToDropdown()}
closeDropdown={() => closeToDropdown()} closeDropdown={() => closeToDropdown()}
onChange={(newTo, newNickname) => this.handleToChange(newTo, newNickname)} dropdownOpen={toDropdownOpen}
inError={inError} inError={inError}
name={'address'}
network={network}
onChange={(newTo, newNickname) => this.handleToChange(newTo, newNickname)}
openDropdown={() => openToDropdown()}
placeholder={this.context.t('recipientAddress')}
to={to}
/> />
</SendRowWrapper> </SendRowWrapper>
); )
} }
} }

View File

@ -1,8 +1,7 @@
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { import {
getSendTo,
getToAccounts,
getCurrentNetwork, getCurrentNetwork,
getSendTo,
getSendToAccounts, getSendToAccounts,
} from '../../send.selectors.js' } from '../../send.selectors.js'
import { import {
@ -23,23 +22,22 @@ import SendToRow from './send-to-row.component'
export default connect(mapStateToProps, mapDispatchToProps)(SendToRow) export default connect(mapStateToProps, mapDispatchToProps)(SendToRow)
function mapStateToProps (state) { function mapStateToProps (state) {
updateSendTo
return { return {
inError: sendToIsInError(state),
network: getCurrentNetwork(state),
to: getSendTo(state), to: getSendTo(state),
toAccounts: getSendToAccounts(state), toAccounts: getSendToAccounts(state),
toDropdownOpen: getToDropdownOpen(state), toDropdownOpen: getToDropdownOpen(state),
inError: sendToIsInError(state),
network: getCurrentNetwork(state),
} }
} }
function mapDispatchToProps (dispatch) { function mapDispatchToProps (dispatch) {
return { return {
closeToDropdown: () => dispatch(closeToDropdown()),
openToDropdown: () => dispatch(openToDropdown()),
updateSendTo: (to, nickname) => dispatch(updateSendTo(to, nickname)),
updateSendToError: (to) => { updateSendToError: (to) => {
dispatch(updateSendErrors(getToErrorObject(to))) dispatch(updateSendErrors(getToErrorObject(to)))
}, },
updateSendTo: (to, nickname) => dispatch(updateSendTo(to, nickname)),
openToDropdown: () => dispatch(openToDropdown()),
closeToDropdown: () => dispatch(closeToDropdown()),
} }
} }

View File

@ -13,5 +13,5 @@ function getToErrorObject (to) {
} }
module.exports = { module.exports = {
getToErrorObject getToErrorObject,
} }

View File

@ -6,24 +6,24 @@ import { CONFIRM_TRANSACTION_ROUTE, DEFAULT_ROUTE } from '../../../routes'
export default class SendFooter extends Component { export default class SendFooter extends Component {
static propTypes = { static propTypes = {
addToAddressBook: PropTypes.func, addToAddressBookIfNew: PropTypes.func,
amount: PropTypes.string, amount: PropTypes.string,
clearSend: PropTypes.func, clearSend: PropTypes.func,
disabled: PropTypes.bool,
editingTransactionId: PropTypes.string, editingTransactionId: PropTypes.string,
errors: PropTypes.object, errors: PropTypes.object,
from: PropTypes.object, from: PropTypes.object,
gasLimit: PropTypes.string, gasLimit: PropTypes.string,
gasPrice: PropTypes.string, gasPrice: PropTypes.string,
gasTotal: PropTypes.string, gasTotal: PropTypes.string,
history: PropTypes.object, history: PropTypes.object,
selectedToken: PropTypes.object, selectedToken: PropTypes.object,
signTokenTx: PropTypes.func, sign: PropTypes.func,
signTx: PropTypes.func,
to: PropTypes.string, to: PropTypes.string,
toAccounts: PropTypes.array, toAccounts: PropTypes.array,
tokenBalance: PropTypes.string, tokenBalance: PropTypes.string,
unapprovedTxs: PropTypes.object, unapprovedTxs: PropTypes.object,
updateTx: PropTypes.func, update: PropTypes.func,
}; };
onSubmit (event) { onSubmit (event) {
@ -56,13 +56,13 @@ export default class SendFooter extends Component {
editingTransactionId editingTransactionId
? update({ ? update({
from,
to,
amount, amount,
editingTransactionId,
from,
gas, gas,
gasPrice, gasPrice,
selectedToken, selectedToken,
editingTransactionId, to,
unapprovedTxs, unapprovedTxs,
}) })
: sign({ selectedToken, to, amount, from, gas, gasPrice }) : sign({ selectedToken, to, amount, from, gas, gasPrice })
@ -83,7 +83,7 @@ export default class SendFooter extends Component {
onSubmit={e => this.onSubmit(e)} onSubmit={e => this.onSubmit(e)}
disabled={disabled} disabled={disabled}
/> />
); )
} }
} }

View File

@ -27,31 +27,32 @@ import {
} from './send-footer.selectors' } from './send-footer.selectors'
import { import {
addressIsNew, addressIsNew,
formShouldBeDisabled,
constructTxParams, constructTxParams,
constructUpdatedTx,
formShouldBeDisabled,
} from './send-footer.utils' } from './send-footer.utils'
export default connect(mapStateToProps, mapDispatchToProps)(SendFooter) export default connect(mapStateToProps, mapDispatchToProps)(SendFooter)
function mapStateToProps (state) { function mapStateToProps (state) {
return { return {
isToken: Boolean(getSelectedToken(state)), amount: getSendAmount(state),
inError: isSendFormInError(state),
disabled: formShouldBeDisabled({ disabled: formShouldBeDisabled({
inError: isSendFormInError(state), inError: isSendFormInError(state),
selectedToken: getSelectedToken(state), selectedToken: getSelectedToken(state),
tokenBalance: getTokenBalance(state), tokenBalance: getTokenBalance(state),
gasTotal: getGasTotal(state), gasTotal: getGasTotal(state),
}), }),
amount: getSendAmount(state),
editingTransactionId: getSendEditingTransactionId(state), editingTransactionId: getSendEditingTransactionId(state),
from: getSendFromObject(state), from: getSendFromObject(state),
gasLimit: getGasLimit(state), gasLimit: getGasLimit(state),
gasPrice: getGasPrice(state), gasPrice: getGasPrice(state),
inError: isSendFormInError(state),
isToken: Boolean(getSelectedToken(state)),
selectedToken: getSelectedToken(state), selectedToken: getSelectedToken(state),
to: getSendTo(state), to: getSendTo(state),
unapprovedTxs: getUnapprovedTxs(state),
toAccounts: getSendToAccounts(state), toAccounts: getSendToAccounts(state),
unapprovedTxs: getUnapprovedTxs(state),
} }
} }
@ -102,6 +103,6 @@ function mapDispatchToProps (dispatch) {
// TODO: nickname, i.e. addToAddressBook(recipient, nickname) // TODO: nickname, i.e. addToAddressBook(recipient, nickname)
dispatch(addToAddressBook(hexPrefixedAddress, nickname)) dispatch(addToAddressBook(hexPrefixedAddress, nickname))
} }
} },
} }
} }

View File

@ -5,9 +5,9 @@ import PageContainerHeader from '../../page-container/page-container-header.comp
export default class SendHeader extends Component { export default class SendHeader extends Component {
static propTypes = { static propTypes = {
isToken: PropTypes.bool,
clearSend: PropTypes.func, clearSend: PropTypes.func,
goHome: PropTypes.func, goHome: PropTypes.func,
isToken: PropTypes.bool,
}; };
render () { render () {
@ -15,14 +15,14 @@ export default class SendHeader extends Component {
return ( return (
<PageContainerHeader <PageContainerHeader
title={isToken ? this.context.t('sendTokens') : this.context.t('sendETH')}
subtitle={this.context.t('onlySendToEtherAddress')}
onClose={() => { onClose={() => {
clearSend() clearSend()
goHome() goHome()
}} }}
subtitle={this.context.t('onlySendToEtherAddress')}
title={isToken ? this.context.t('sendTokens') : this.context.t('sendETH')}
/> />
); )
} }
} }

View File

@ -7,13 +7,13 @@ export default connect(mapStateToProps, mapDispatchToProps)(SendHeader)
function mapStateToProps (state) { function mapStateToProps (state) {
return { return {
isToken: Boolean(getSelectedToken(state)) isToken: Boolean(getSelectedToken(state)),
} }
} }
function mapDispatchToProps (dispatch) { function mapDispatchToProps (dispatch) {
return { return {
goHome: () => dispatch(goHome()),
clearSend: () => dispatch(clearSend()), clearSend: () => dispatch(clearSend()),
goHome: () => dispatch(goHome()),
} }
} }

View File

@ -29,8 +29,8 @@ const selectors = {
getSendEditingTransactionId, getSendEditingTransactionId,
getSendErrors, getSendErrors,
getSendFrom, getSendFrom,
getSendFromObject,
getSendFromBalance, getSendFromBalance,
getSendFromObject,
getSendMaxModeState, getSendMaxModeState,
getSendTo, getSendTo,
getSendToAccounts, getSendToAccounts,
@ -43,169 +43,19 @@ const selectors = {
module.exports = 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 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 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 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 getConversionRate (state) {
return state.metamask.conversionRate
}
function getConvertedCurrency (state) {
return state.metamask.currentCurrency
}
function getAddressBook (state) {
return state.metamask.addressBook
}
function accountsWithSendEtherInfoSelector (state) { function accountsWithSendEtherInfoSelector (state) {
const { const {
accounts, accounts,
identities, identities,
} = state.metamask } = state.metamask
console.log(`accountsWithSendEtherInfoSelector accounts`, accounts);
console.log(`accountsWithSendEtherInfoSelector identities`, identities);
const accountsWithSendEtherInfo = Object.entries(accounts).map(([key, account]) => { const accountsWithSendEtherInfo = Object.entries(accounts).map(([key, account]) => {
return Object.assign({}, account, identities[key]) return Object.assign({}, account, identities[key])
}) })
console.log(`accountsWithSendEtherInfoSelector accountsWithSendEtherInfo`, accountsWithSendEtherInfo);
return accountsWithSendEtherInfo return accountsWithSendEtherInfo
} }
function getCurrentAccountWithSendEtherInfo (state) {
const currentAddress = getSelectedAddress(state)
const accounts = accountsWithSendEtherInfoSelector(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)
// 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 getGasPrice (state) {
return state.metamask.send.gasPrice
}
function getGasTotal (state) {
return state.metamask.send.gasTotal
}
function getGasLimit (state) {
return state.metamask.send.gasLimit
}
function getForceGasMin (state) {
return state.metamask.send.forceGasMin
}
function getSendFrom (state) {
return state.metamask.send.from
}
function getSendFromObject (state) {
return getSendFrom(state) || getCurrentAccountWithSendEtherInfo(state)
}
function getSendFromBalance (state) {
const from = getSendFrom(state) || getSelectedAccount(state)
return from.balance
}
function getSendAmount (state) {
return state.metamask.send.amount
}
function getSendMaxModeState (state) {
return state.metamask.send.maxModeOn
}
function getCurrentCurrency (state) {
return state.metamask.currentCurrency
}
function getSelectedTokenToFiatRate (state) {
const selectedTokenExchangeRate = getSelectedTokenExchangeRate(state)
const conversionRate = getConversionRate(state)
const tokenToFiatRate = multiplyCurrencies(
conversionRate,
selectedTokenExchangeRate,
{ toNumericBase: 'dec' }
)
return tokenToFiatRate
}
function getSelectedTokenContract (state) {
const selectedToken = getSelectedToken(state)
return selectedToken
? global.eth.contract(abi).at(selectedToken.address)
: null
}
function autoAddToBetaUI (state) { function autoAddToBetaUI (state) {
const autoAddTransactionThreshold = 12 const autoAddTransactionThreshold = 12
const autoAddAccountsThreshold = 2 const autoAddAccountsThreshold = 2
@ -223,11 +73,118 @@ function autoAddToBetaUI (state) {
return userIsNotInBeta && userPassesThreshold return userIsNotInBeta && userPassesThreshold
} }
function getAddressBook (state) {
return state.metamask.addressBook
}
function getConversionRate (state) {
return state.metamask.conversionRate
}
function getConvertedCurrency (state) {
return state.metamask.currentCurrency
}
function getCurrentAccountWithSendEtherInfo (state) {
const currentAddress = getSelectedAddress(state)
const accounts = accountsWithSendEtherInfoSelector(state)
return accounts.find(({ address }) => address === currentAddress)
}
function getCurrentCurrency (state) {
return state.metamask.currentCurrency
}
function getCurrentNetwork (state) {
return state.metamask.network
}
function getCurrentViewContext (state) { function getCurrentViewContext (state) {
const { currentView = {} } = state.appState const { currentView = {} } = state.appState
return currentView.context return currentView.context
} }
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 getGasTotal (state) {
return state.metamask.send.gasTotal
}
function getSelectedAccount (state) {
const accounts = state.metamask.accounts
const selectedAddress = getSelectedAddress(state)
return accounts[selectedAddress]
}
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 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 getSelectedTokenContract (state) {
const selectedToken = getSelectedToken(state)
return selectedToken
? global.eth.contract(abi).at(selectedToken.address)
: null
}
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) {
const selectedTokenExchangeRate = getSelectedTokenExchangeRate(state)
const conversionRate = getConversionRate(state)
const tokenToFiatRate = multiplyCurrencies(
conversionRate,
selectedTokenExchangeRate,
{ toNumericBase: 'dec' }
)
return tokenToFiatRate
}
function getSendAmount (state) {
return state.metamask.send.amount
}
function getSendEditingTransactionId (state) { function getSendEditingTransactionId (state) {
return state.metamask.send.editingTransactionId return state.metamask.send.editingTransactionId
} }
@ -236,12 +193,25 @@ function getSendErrors (state) {
return state.metamask.send.errors return state.metamask.send.errors
} }
function getSendTo (state) { function getSendFrom (state) {
return state.metamask.send.to return state.metamask.send.from
} }
function getTokenBalance (state) { function getSendFromBalance (state) {
return state.metamask.send.tokenBalance const from = getSendFrom(state) || getSelectedAccount(state)
return from.balance
}
function getSendFromObject (state) {
return getSendFrom(state) || getCurrentAccountWithSendEtherInfo(state)
}
function getSendMaxModeState (state) {
return state.metamask.send.maxModeOn
}
function getSendTo (state) {
return state.metamask.send.to
} }
function getSendToAccounts (state) { function getSendToAccounts (state) {
@ -252,11 +222,38 @@ function getSendToAccounts (state) {
return Object.entries(allAccounts).map(([key, account]) => account) return Object.entries(allAccounts).map(([key, account]) => account)
} }
function getCurrentNetwork (state) { function getTokenBalance (state) {
return state.metamask.network 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) { function isSendFormInError (state) {
const { amount, to } = getSendErrors(state) const { amount, to } = getSendErrors(state)
return Boolean(amount || toError !== null) 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)
} }

View File

@ -8,13 +8,21 @@ const {
calcTokenAmount, calcTokenAmount,
} = require('../../token-util') } = require('../../token-util')
function getGasTotal (gasLimit, gasPrice) {
return multiplyCurrencies(gasLimit, gasPrice, {
toNumericBase: 'hex',
multiplicandBase: 16,
multiplierBase: 16,
})
}
function isBalanceSufficient ({ function isBalanceSufficient ({
amount = '0x0', amount = '0x0',
gasTotal = '0x0',
balance,
primaryCurrency,
amountConversionRate, amountConversionRate,
balance,
conversionRate, conversionRate,
gasTotal = '0x0',
primaryCurrency,
}) { }) {
const totalAmount = addCurrencies(amount, gasTotal, { const totalAmount = addCurrencies(amount, gasTotal, {
aBase: 16, aBase: 16,
@ -63,14 +71,6 @@ function isTokenBalanceSufficient ({
return tokenBalanceIsSufficient return tokenBalanceIsSufficient
} }
function getGasTotal (gasLimit, gasPrice) {
return multiplyCurrencies(gasLimit, gasPrice, {
toNumericBase: 'hex',
multiplicandBase: 16,
multiplierBase: 16,
})
}
module.exports = { module.exports = {
getGasTotal, getGasTotal,
isBalanceSufficient, isBalanceSufficient,

View File

@ -1,10 +1,10 @@
import extend from 'xtend' import extend from 'xtend'
// Actions // Actions
const OPEN_FROM_DROPDOWN = 'metamask/send/OPEN_FROM_DROPDOWN'; const OPEN_FROM_DROPDOWN = 'metamask/send/OPEN_FROM_DROPDOWN'
const CLOSE_FROM_DROPDOWN = 'metamask/send/CLOSE_FROM_DROPDOWN'; const CLOSE_FROM_DROPDOWN = 'metamask/send/CLOSE_FROM_DROPDOWN'
const OPEN_TO_DROPDOWN = 'metamask/send/OPEN_TO_DROPDOWN'; const OPEN_TO_DROPDOWN = 'metamask/send/OPEN_TO_DROPDOWN'
const CLOSE_TO_DROPDOWN = 'metamask/send/CLOSE_TO_DROPDOWN'; const CLOSE_TO_DROPDOWN = 'metamask/send/CLOSE_TO_DROPDOWN'
// TODO: determine if this approach to initState is consistent with conventional ducks pattern // TODO: determine if this approach to initState is consistent with conventional ducks pattern
const initState = { const initState = {
@ -14,7 +14,7 @@ const initState = {
} }
// Reducer // Reducer
export default function reducer({ send: sendState = initState }, action = {}) { export default function reducer ({ send: sendState = initState }, action = {}) {
switch (action.type) { switch (action.type) {
case OPEN_FROM_DROPDOWN: case OPEN_FROM_DROPDOWN:
return extend(sendState, { return extend(sendState, {
@ -38,18 +38,18 @@ export default function reducer({ send: sendState = initState }, action = {}) {
} }
// Action Creators // Action Creators
export function openFromDropdown() { export function openFromDropdown () {
return { type: OPEN_FROM_DROPDOWN }; return { type: OPEN_FROM_DROPDOWN }
} }
export function closeFromDropdown() { export function closeFromDropdown () {
return { type: CLOSE_FROM_DROPDOWN }; return { type: CLOSE_FROM_DROPDOWN }
} }
export function openToDropdown() { export function openToDropdown () {
return { type: OPEN_TO_DROPDOWN }; return { type: OPEN_TO_DROPDOWN }
} }
export function closeToDropdown() { export function closeToDropdown () {
return { type: CLOSE_TO_DROPDOWN }; return { type: CLOSE_TO_DROPDOWN }
} }

View File

@ -3,23 +3,8 @@ const PropTypes = require('prop-types')
const PersistentForm = require('../lib/persistent-form') const PersistentForm = require('../lib/persistent-form')
const h = require('react-hyperscript') 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 { const {
TOKEN_TRANSFER_FUNCTION_SIGNATURE,
} = require('./components/send/send-constants')
const {
multiplyCurrencies,
conversionGreaterThan, conversionGreaterThan,
subtractCurrencies,
} = require('./conversion-util') } = require('./conversion-util')
const { const {
calcTokenAmount, calcTokenAmount,
@ -29,8 +14,6 @@ const {
isTokenBalanceSufficient, isTokenBalanceSufficient,
getGasTotal, getGasTotal,
} = require('./components/send/send-utils') } = 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 PageContainer from './components/page-container/page-container.component'
import SendHeader from './components/send_/send-header/send-header.container' import SendHeader from './components/send_/send-header/send-header.container'