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:
parent
8ff7806f1b
commit
91c201aa72
@ -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>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ export default class PageContainerFooter extends Component {
|
|||||||
</button>
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ export default class PageContainerHeader extends Component {
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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>)
|
||||||
|
@ -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>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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)),
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,5 +18,5 @@ function calcMaxAmount ({ balance, gasTotal, selectedToken, tokenBalance }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
calcMaxAmount
|
calcMaxAmount,
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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)),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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}
|
||||||
|
@ -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>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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()),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,5 +8,5 @@ function calcTokenUpdateAmount (usersToken, selectedToken) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
calcTokenUpdateAmount
|
calcTokenUpdateAmount,
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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()),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -13,5 +13,5 @@ function getToErrorObject (to) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getToErrorObject
|
getToErrorObject,
|
||||||
}
|
}
|
||||||
|
@ -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}
|
||||||
/>
|
/>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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))
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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')}
|
||||||
/>
|
/>
|
||||||
);
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
@ -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,
|
||||||
|
@ -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 }
|
||||||
}
|
}
|
@ -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'
|
||||||
|
Loading…
Reference in New Issue
Block a user