mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 18:00:18 +01:00
Consolidate send, onboarding selectors (#8501)
* reorganize & dedupe send selectors
This commit is contained in:
parent
eaa9f759f9
commit
898f8458a2
@ -110,11 +110,6 @@ describe('Selectors', function () {
|
|||||||
assert.equal(sendAmount, '1bc16d674ec80000')
|
assert.equal(sendAmount, '1bc16d674ec80000')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#getSendMaxModeState', function () {
|
|
||||||
const sendMaxModeState = selectors.getSendMaxModeState(mockState)
|
|
||||||
assert.equal(sendMaxModeState, false)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('#getCurrentCurrency', function () {
|
it('#getCurrentCurrency', function () {
|
||||||
const currentCurrency = selectors.getCurrentCurrency(mockState)
|
const currentCurrency = selectors.getCurrentCurrency(mockState)
|
||||||
assert.equal(currentCurrency, 'usd')
|
assert.equal(currentCurrency, 'usd')
|
||||||
|
@ -45,6 +45,7 @@ import {
|
|||||||
} from '../../../../selectors'
|
} from '../../../../selectors'
|
||||||
import {
|
import {
|
||||||
getTokenBalance,
|
getTokenBalance,
|
||||||
|
getSendMaxModeState,
|
||||||
} from '../../../../pages/send/send.selectors'
|
} from '../../../../pages/send/send.selectors'
|
||||||
import {
|
import {
|
||||||
formatCurrency,
|
formatCurrency,
|
||||||
@ -64,7 +65,6 @@ import {
|
|||||||
isBalanceSufficient,
|
isBalanceSufficient,
|
||||||
} from '../../../../pages/send/send.utils'
|
} from '../../../../pages/send/send.utils'
|
||||||
import { addHexPrefix } from 'ethereumjs-util'
|
import { addHexPrefix } from 'ethereumjs-util'
|
||||||
import { getMaxModeOn } from '../../../../pages/send/send-content/send-amount-row/amount-max-button/amount-max-button.selectors'
|
|
||||||
import { calcMaxAmount } from '../../../../pages/send/send-content/send-amount-row/amount-max-button/amount-max-button.utils'
|
import { calcMaxAmount } from '../../../../pages/send/send-content/send-amount-row/amount-max-button/amount-max-button.utils'
|
||||||
|
|
||||||
const mapStateToProps = (state, ownProps) => {
|
const mapStateToProps = (state, ownProps) => {
|
||||||
@ -93,7 +93,7 @@ const mapStateToProps = (state, ownProps) => {
|
|||||||
|
|
||||||
const customGasPrice = calcCustomGasPrice(customModalGasPriceInHex)
|
const customGasPrice = calcCustomGasPrice(customModalGasPriceInHex)
|
||||||
|
|
||||||
const maxModeOn = getMaxModeOn(state)
|
const maxModeOn = getSendMaxModeState(state)
|
||||||
|
|
||||||
const gasPrices = getEstimatedGasPrices(state)
|
const gasPrices = getEstimatedGasPrices(state)
|
||||||
const estimatedTimes = getEstimatedGasTimes(state)
|
const estimatedTimes = getEstimatedGasTimes(state)
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
import CurrencyInput from './currency-input.component'
|
import CurrencyInput from './currency-input.component'
|
||||||
import { ETH } from '../../../helpers/constants/common'
|
import { ETH } from '../../../helpers/constants/common'
|
||||||
import { getMaxModeOn } from '../../../pages/send/send-content/send-amount-row/amount-max-button/amount-max-button.selectors'
|
import { getSendMaxModeState } from '../../../pages/send/send.selectors'
|
||||||
import { getIsMainnet, preferencesSelector } from '../../../selectors'
|
import { getIsMainnet, preferencesSelector } from '../../../selectors'
|
||||||
|
|
||||||
const mapStateToProps = (state) => {
|
const mapStateToProps = (state) => {
|
||||||
const { metamask: { nativeCurrency, currentCurrency, conversionRate } } = state
|
const { metamask: { nativeCurrency, currentCurrency, conversionRate } } = state
|
||||||
const { showFiatInTestnets } = preferencesSelector(state)
|
const { showFiatInTestnets } = preferencesSelector(state)
|
||||||
const isMainnet = getIsMainnet(state)
|
const isMainnet = getIsMainnet(state)
|
||||||
const maxModeOn = getMaxModeOn(state)
|
const maxModeOn = getSendMaxModeState(state)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
nativeCurrency,
|
nativeCurrency,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
import EndOfFlow from './end-of-flow.component'
|
import EndOfFlow from './end-of-flow.component'
|
||||||
import { setCompletedOnboarding } from '../../../store/actions'
|
import { setCompletedOnboarding } from '../../../store/actions'
|
||||||
import { getOnboardingInitiator } from '../first-time-flow.selectors'
|
import { getOnboardingInitiator } from '../../../selectors'
|
||||||
|
|
||||||
const firstTimeFlowTypeNameMap = {
|
const firstTimeFlowTypeNameMap = {
|
||||||
create: 'New Wallet Created',
|
create: 'New Wallet Created',
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
import FirstTimeFlow from './first-time-flow.component'
|
import FirstTimeFlow from './first-time-flow.component'
|
||||||
import { getFirstTimeFlowTypeRoute } from './first-time-flow.selectors'
|
import { getFirstTimeFlowTypeRoute } from '../../selectors'
|
||||||
import {
|
import {
|
||||||
createNewVaultAndGetSeedPhrase,
|
createNewVaultAndGetSeedPhrase,
|
||||||
createNewVaultAndRestore,
|
createNewVaultAndRestore,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
import MetaMetricsOptIn from './metametrics-opt-in.component'
|
import MetaMetricsOptIn from './metametrics-opt-in.component'
|
||||||
import { setParticipateInMetaMetrics } from '../../../store/actions'
|
import { setParticipateInMetaMetrics } from '../../../store/actions'
|
||||||
import { getFirstTimeFlowTypeRoute } from '../first-time-flow.selectors'
|
import { getFirstTimeFlowTypeRoute } from '../../../selectors'
|
||||||
|
|
||||||
const firstTimeFlowTypeNameMap = {
|
const firstTimeFlowTypeNameMap = {
|
||||||
create: 'Selected Create New Wallet',
|
create: 'Selected Create New Wallet',
|
||||||
|
@ -4,7 +4,7 @@ import {
|
|||||||
setCompletedOnboarding,
|
setCompletedOnboarding,
|
||||||
setSeedPhraseBackedUp,
|
setSeedPhraseBackedUp,
|
||||||
} from '../../../../store/actions'
|
} from '../../../../store/actions'
|
||||||
import { getOnboardingInitiator } from '../../first-time-flow.selectors'
|
import { getOnboardingInitiator } from '../../../../selectors'
|
||||||
|
|
||||||
const mapStateToProps = (state) => {
|
const mapStateToProps = (state) => {
|
||||||
return {
|
return {
|
||||||
|
@ -2,7 +2,7 @@ import { connect } from 'react-redux'
|
|||||||
import { withRouter } from 'react-router-dom'
|
import { withRouter } from 'react-router-dom'
|
||||||
import { compose } from 'redux'
|
import { compose } from 'redux'
|
||||||
import { setFirstTimeFlowType } from '../../../store/actions'
|
import { setFirstTimeFlowType } from '../../../store/actions'
|
||||||
import { getFirstTimeFlowTypeRoute } from '../first-time-flow.selectors'
|
import { getFirstTimeFlowTypeRoute } from '../../../selectors'
|
||||||
import Welcome from './select-action.component'
|
import Welcome from './select-action.component'
|
||||||
|
|
||||||
const mapStateToProps = (state) => {
|
const mapStateToProps = (state) => {
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
export function getToDropdownOpen (state) {
|
|
||||||
return state.send.toDropdownOpen
|
|
||||||
}
|
|
||||||
|
|
||||||
export function sendToIsInError (state) {
|
|
||||||
return Boolean(state.send.errors.to)
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getTokens (state) {
|
|
||||||
return state.metamask.tokens
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
import assert from 'assert'
|
|
||||||
import {
|
|
||||||
getToDropdownOpen,
|
|
||||||
getTokens,
|
|
||||||
sendToIsInError,
|
|
||||||
} from '../add-recipient.selectors.js'
|
|
||||||
|
|
||||||
describe('add-recipient selectors', function () {
|
|
||||||
|
|
||||||
describe('getToDropdownOpen()', function () {
|
|
||||||
it('should return send.getToDropdownOpen', function () {
|
|
||||||
const state = {
|
|
||||||
send: {
|
|
||||||
toDropdownOpen: false,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.equal(getToDropdownOpen(state), false)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('sendToIsInError()', function () {
|
|
||||||
it('should return true if send.errors.to is truthy', function () {
|
|
||||||
const state = {
|
|
||||||
send: {
|
|
||||||
errors: {
|
|
||||||
to: 'abc',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.equal(sendToIsInError(state), true)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return false if send.errors.to is falsy', function () {
|
|
||||||
const state = {
|
|
||||||
send: {
|
|
||||||
errors: {
|
|
||||||
to: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.equal(sendToIsInError(state), false)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getTokens()', function () {
|
|
||||||
it('should return empty array if no tokens in state', function () {
|
|
||||||
const state = {
|
|
||||||
metamask: {
|
|
||||||
tokens: [],
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.deepStrictEqual(getTokens(state), [])
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
@ -4,9 +4,9 @@ import {
|
|||||||
getSelectedToken,
|
getSelectedToken,
|
||||||
getSendFromBalance,
|
getSendFromBalance,
|
||||||
getTokenBalance,
|
getTokenBalance,
|
||||||
|
getSendMaxModeState,
|
||||||
} from '../../../send.selectors.js'
|
} from '../../../send.selectors.js'
|
||||||
import { getBasicGasEstimateLoadingStatus } from '../../../../../selectors'
|
import { getBasicGasEstimateLoadingStatus } from '../../../../../selectors'
|
||||||
import { getMaxModeOn } from './amount-max-button.selectors.js'
|
|
||||||
import { calcMaxAmount } from './amount-max-button.utils.js'
|
import { calcMaxAmount } from './amount-max-button.utils.js'
|
||||||
import {
|
import {
|
||||||
updateSendAmount,
|
updateSendAmount,
|
||||||
@ -25,7 +25,7 @@ function mapStateToProps (state) {
|
|||||||
balance: getSendFromBalance(state),
|
balance: getSendFromBalance(state),
|
||||||
buttonDataLoading: getBasicGasEstimateLoadingStatus(state),
|
buttonDataLoading: getBasicGasEstimateLoadingStatus(state),
|
||||||
gasTotal: getGasTotal(state),
|
gasTotal: getGasTotal(state),
|
||||||
maxModeOn: getMaxModeOn(state),
|
maxModeOn: getSendMaxModeState(state),
|
||||||
selectedToken: getSelectedToken(state),
|
selectedToken: getSelectedToken(state),
|
||||||
tokenBalance: getTokenBalance(state),
|
tokenBalance: getTokenBalance(state),
|
||||||
}
|
}
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
export function getMaxModeOn (state) {
|
|
||||||
return state.metamask.send.maxModeOn
|
|
||||||
}
|
|
@ -26,8 +26,8 @@ proxyquire('../amount-max-button.container.js', {
|
|||||||
getSelectedToken: (s) => `mockSelectedToken:${s}`,
|
getSelectedToken: (s) => `mockSelectedToken:${s}`,
|
||||||
getSendFromBalance: (s) => `mockBalance:${s}`,
|
getSendFromBalance: (s) => `mockBalance:${s}`,
|
||||||
getTokenBalance: (s) => `mockTokenBalance:${s}`,
|
getTokenBalance: (s) => `mockTokenBalance:${s}`,
|
||||||
|
getSendMaxModeState: (s) => `mockMaxModeOn:${s}`,
|
||||||
},
|
},
|
||||||
'./amount-max-button.selectors.js': { getMaxModeOn: (s) => `mockMaxModeOn:${s}` },
|
|
||||||
'./amount-max-button.utils.js': { calcMaxAmount: (mockObj) => mockObj.val + 1 },
|
'./amount-max-button.utils.js': { calcMaxAmount: (mockObj) => mockObj.val + 1 },
|
||||||
'../../../../../selectors/': { getBasicGasEstimateLoadingStatus: (s) => `mockButtonDataLoading:${s}` },
|
'../../../../../selectors/': { getBasicGasEstimateLoadingStatus: (s) => `mockButtonDataLoading:${s}` },
|
||||||
'../../../../../store/actions': actionSpies,
|
'../../../../../store/actions': actionSpies,
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
import assert from 'assert'
|
|
||||||
import {
|
|
||||||
getMaxModeOn,
|
|
||||||
} from '../amount-max-button.selectors.js'
|
|
||||||
|
|
||||||
describe('amount-max-button selectors', function () {
|
|
||||||
|
|
||||||
describe('getMaxModeOn()', function () {
|
|
||||||
it('should', function () {
|
|
||||||
const state = {
|
|
||||||
metamask: {
|
|
||||||
send: {
|
|
||||||
maxModeOn: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.equal(getMaxModeOn(state), null)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
@ -9,10 +9,8 @@ import {
|
|||||||
getSendFromBalance,
|
getSendFromBalance,
|
||||||
getTokenBalance,
|
getTokenBalance,
|
||||||
getSendMaxModeState,
|
getSendMaxModeState,
|
||||||
} from '../../send.selectors'
|
|
||||||
import {
|
|
||||||
sendAmountIsInError,
|
sendAmountIsInError,
|
||||||
} from './send-amount-row.selectors'
|
} from '../../send.selectors'
|
||||||
import { getAmountErrorObject, getGasFeeErrorObject } from '../../send.utils'
|
import { getAmountErrorObject, getGasFeeErrorObject } from '../../send.utils'
|
||||||
import {
|
import {
|
||||||
setMaxModeTo,
|
setMaxModeTo,
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
export function sendAmountIsInError (state) {
|
|
||||||
return Boolean(state.send.errors.amount)
|
|
||||||
}
|
|
@ -19,7 +19,7 @@ proxyquire('../send-amount-row.container.js', {
|
|||||||
return () => ({})
|
return () => ({})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'./send-amount-row.selectors': { sendAmountIsInError: (s) => `mockInError:${s}` },
|
'../../send.selectors': { sendAmountIsInError: (s) => `mockInError:${s}` },
|
||||||
'../../send.utils': {
|
'../../send.utils': {
|
||||||
getAmountErrorObject: (mockDataObject) => ({ ...mockDataObject, mockChange: true }),
|
getAmountErrorObject: (mockDataObject) => ({ ...mockDataObject, mockChange: true }),
|
||||||
getGasFeeErrorObject: (mockDataObject) => ({ ...mockDataObject, mockGasFeeErrorChange: true }),
|
getGasFeeErrorObject: (mockDataObject) => ({ ...mockDataObject, mockGasFeeErrorChange: true }),
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
import assert from 'assert'
|
|
||||||
import {
|
|
||||||
sendAmountIsInError,
|
|
||||||
} from '../send-amount-row.selectors.js'
|
|
||||||
|
|
||||||
describe('send-amount-row selectors', function () {
|
|
||||||
|
|
||||||
describe('sendAmountIsInError()', function () {
|
|
||||||
it('should return true if send.errors.amount is truthy', function () {
|
|
||||||
const state = {
|
|
||||||
send: {
|
|
||||||
errors: {
|
|
||||||
amount: 'abc',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.equal(sendAmountIsInError(state), true)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return false if send.errors.amount is falsy', function () {
|
|
||||||
const state = {
|
|
||||||
send: {
|
|
||||||
errors: {
|
|
||||||
amount: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.equal(sendAmountIsInError(state), false)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
@ -7,10 +7,11 @@ import {
|
|||||||
getSendAmount,
|
getSendAmount,
|
||||||
getSendFromBalance,
|
getSendFromBalance,
|
||||||
getTokenBalance,
|
getTokenBalance,
|
||||||
|
getSendMaxModeState,
|
||||||
|
getGasLoadingError,
|
||||||
|
gasFeeIsInError,
|
||||||
|
getGasButtonGroupShown,
|
||||||
} from '../../send.selectors.js'
|
} from '../../send.selectors.js'
|
||||||
import {
|
|
||||||
getMaxModeOn,
|
|
||||||
} from '../send-amount-row/amount-max-button/amount-max-button.selectors'
|
|
||||||
import {
|
import {
|
||||||
isBalanceSufficient,
|
isBalanceSufficient,
|
||||||
calcGasTotal,
|
calcGasTotal,
|
||||||
@ -25,7 +26,6 @@ import {
|
|||||||
setCustomGasPrice,
|
setCustomGasPrice,
|
||||||
setCustomGasLimit,
|
setCustomGasLimit,
|
||||||
} from '../../../../ducks/gas/gas.duck'
|
} from '../../../../ducks/gas/gas.duck'
|
||||||
import { getGasLoadingError, gasFeeIsInError, getGasButtonGroupShown } from './send-gas-row.selectors.js'
|
|
||||||
import { showModal, setGasPrice, setGasLimit, setGasTotal, updateSendAmount } from '../../../../store/actions'
|
import { showModal, setGasPrice, setGasLimit, setGasTotal, updateSendAmount } from '../../../../store/actions'
|
||||||
import {
|
import {
|
||||||
getAdvancedInlineGasShown,
|
getAdvancedInlineGasShown,
|
||||||
@ -73,7 +73,7 @@ function mapStateToProps (state) {
|
|||||||
gasPrice,
|
gasPrice,
|
||||||
gasLimit,
|
gasLimit,
|
||||||
insufficientBalance,
|
insufficientBalance,
|
||||||
maxModeOn: getMaxModeOn(state),
|
maxModeOn: getSendMaxModeState(state),
|
||||||
selectedToken: getSelectedToken(state),
|
selectedToken: getSelectedToken(state),
|
||||||
tokenBalance: getTokenBalance(state),
|
tokenBalance: getTokenBalance(state),
|
||||||
}
|
}
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
export function getGasLoadingError (state) {
|
|
||||||
return state.send.errors.gasLoading
|
|
||||||
}
|
|
||||||
|
|
||||||
export function gasFeeIsInError (state) {
|
|
||||||
return Boolean(state.send.errors.gasFee)
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getGasButtonGroupShown (state) {
|
|
||||||
return state.send.gasButtonGroupShown
|
|
||||||
}
|
|
@ -30,8 +30,8 @@ proxyquire('../send-gas-row.container.js', {
|
|||||||
return () => ({})
|
return () => ({})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'../send-amount-row/amount-max-button/amount-max-button.selectors': {
|
'../../send.selectors.js': {
|
||||||
getMaxModeOn: (s) => `mockMaxModeOn:${s}`,
|
getSendMaxModeState: (s) => `mockMaxModeOn:${s}`,
|
||||||
},
|
},
|
||||||
'../../send.utils.js': {
|
'../../send.utils.js': {
|
||||||
isBalanceSufficient: ({
|
isBalanceSufficient: ({
|
||||||
|
@ -1,62 +0,0 @@
|
|||||||
import assert from 'assert'
|
|
||||||
import {
|
|
||||||
gasFeeIsInError,
|
|
||||||
getGasLoadingError,
|
|
||||||
getGasButtonGroupShown,
|
|
||||||
} from '../send-gas-row.selectors.js'
|
|
||||||
|
|
||||||
describe('send-gas-row selectors', function () {
|
|
||||||
|
|
||||||
describe('getGasLoadingError()', function () {
|
|
||||||
it('should return send.errors.gasLoading', function () {
|
|
||||||
const state = {
|
|
||||||
send: {
|
|
||||||
errors: {
|
|
||||||
gasLoading: 'abc',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.equal(getGasLoadingError(state), 'abc')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('gasFeeIsInError()', function () {
|
|
||||||
it('should return true if send.errors.gasFee is truthy', function () {
|
|
||||||
const state = {
|
|
||||||
send: {
|
|
||||||
errors: {
|
|
||||||
gasFee: 'def',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.equal(gasFeeIsInError(state), true)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return false send.errors.gasFee is falsely', function () {
|
|
||||||
const state = {
|
|
||||||
send: {
|
|
||||||
errors: {
|
|
||||||
gasFee: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.equal(gasFeeIsInError(state), false)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('getGasButtonGroupShown()', function () {
|
|
||||||
it('should return send.gasButtonGroupShown', function () {
|
|
||||||
const state = {
|
|
||||||
send: {
|
|
||||||
gasButtonGroupShown: 'foobar',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.equal(getGasButtonGroupShown(state), 'foobar')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
@ -22,10 +22,8 @@ import {
|
|||||||
getTokenBalance,
|
getTokenBalance,
|
||||||
getUnapprovedTxs,
|
getUnapprovedTxs,
|
||||||
getSendErrors,
|
getSendErrors,
|
||||||
} from '../send.selectors'
|
|
||||||
import {
|
|
||||||
isSendFormInError,
|
isSendFormInError,
|
||||||
} from './send-footer.selectors'
|
} from '../send.selectors'
|
||||||
import {
|
import {
|
||||||
addressIsNew,
|
addressIsNew,
|
||||||
constructTxParams,
|
constructTxParams,
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
import { getSendErrors } from '../send.selectors'
|
|
||||||
|
|
||||||
export function isSendFormInError (state) {
|
|
||||||
return Object.values(getSendErrors(state)).some((n) => n)
|
|
||||||
}
|
|
@ -42,8 +42,8 @@ proxyquire('../send-footer.container.js', {
|
|||||||
getSendHexData: (s) => `mockHexData:${s}`,
|
getSendHexData: (s) => `mockHexData:${s}`,
|
||||||
getUnapprovedTxs: (s) => `mockUnapprovedTxs:${s}`,
|
getUnapprovedTxs: (s) => `mockUnapprovedTxs:${s}`,
|
||||||
getSendErrors: (s) => `mockSendErrors:${s}`,
|
getSendErrors: (s) => `mockSendErrors:${s}`,
|
||||||
|
isSendFormInError: (s) => `mockInError:${s}`,
|
||||||
},
|
},
|
||||||
'./send-footer.selectors': { isSendFormInError: (s) => `mockInError:${s}` },
|
|
||||||
'./send-footer.utils': utilsStubs,
|
'./send-footer.utils': utilsStubs,
|
||||||
'../../../selectors/': {
|
'../../../selectors/': {
|
||||||
getRenderableEstimateDataForSmallButtonsFromGWEI: (s) => ([{ gasEstimateType: `mockGasEstimateType:${s}` }]),
|
getRenderableEstimateDataForSmallButtonsFromGWEI: (s) => ([{ gasEstimateType: `mockGasEstimateType:${s}` }]),
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
import assert from 'assert'
|
|
||||||
import proxyquire from 'proxyquire'
|
|
||||||
|
|
||||||
const {
|
|
||||||
isSendFormInError,
|
|
||||||
} = proxyquire('../send-footer.selectors', {
|
|
||||||
'../send.selectors': {
|
|
||||||
getSendErrors: (mockState) => mockState.errors,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('send-footer selectors', function () {
|
|
||||||
|
|
||||||
describe('getTitleKey()', function () {
|
|
||||||
it('should return true if any of the values of the object returned by getSendErrors are truthy', function () {
|
|
||||||
assert.equal(isSendFormInError({ errors: { a: 'abc', b: false } }), true)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return false if all of the values of the object returned by getSendErrors are falsy', function () {
|
|
||||||
assert.equal(isSendFormInError({ errors: { a: false, b: null } }), false)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
@ -1,7 +1,7 @@
|
|||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
import { clearSend } from '../../../store/actions'
|
import { clearSend } from '../../../store/actions'
|
||||||
import SendHeader from './send-header.component'
|
import SendHeader from './send-header.component'
|
||||||
import { getTitleKey } from './send-header.selectors'
|
import { getTitleKey } from '../send.selectors'
|
||||||
|
|
||||||
export default connect(mapStateToProps, mapDispatchToProps)(SendHeader)
|
export default connect(mapStateToProps, mapDispatchToProps)(SendHeader)
|
||||||
|
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
import { getSelectedToken, getSendEditingTransactionId, getSendTo } from '../send.selectors.js'
|
|
||||||
|
|
||||||
export function getTitleKey (state) {
|
|
||||||
const isEditing = Boolean(getSendEditingTransactionId(state))
|
|
||||||
const isToken = Boolean(getSelectedToken(state))
|
|
||||||
|
|
||||||
if (!getSendTo(state)) {
|
|
||||||
return 'addRecipient'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isEditing) {
|
|
||||||
return 'edit'
|
|
||||||
} else if (isToken) {
|
|
||||||
return 'sendTokens'
|
|
||||||
} else {
|
|
||||||
return 'sendETH'
|
|
||||||
}
|
|
||||||
}
|
|
@ -18,7 +18,7 @@ proxyquire('../send-header.container.js', {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
'../../../store/actions': actionSpies,
|
'../../../store/actions': actionSpies,
|
||||||
'./send-header.selectors': {
|
'../send.selectors': {
|
||||||
getTitleKey: (s) => `mockTitleKey:${s}`,
|
getTitleKey: (s) => `mockTitleKey:${s}`,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
import assert from 'assert'
|
|
||||||
import proxyquire from 'proxyquire'
|
|
||||||
|
|
||||||
const {
|
|
||||||
getTitleKey,
|
|
||||||
} = proxyquire('../send-header.selectors', {
|
|
||||||
'../send.selectors': {
|
|
||||||
getSelectedToken: (mockState) => mockState.t,
|
|
||||||
getSendEditingTransactionId: (mockState) => mockState.e,
|
|
||||||
getSendTo: (mockState) => mockState.to,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('send-header selectors', function () {
|
|
||||||
|
|
||||||
describe('getTitleKey()', function () {
|
|
||||||
it('should return the correct key when "to" is empty', function () {
|
|
||||||
assert.equal(getTitleKey({ e: 1, t: true, to: '' }), 'addRecipient')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return the correct key when getSendEditingTransactionId is truthy', function () {
|
|
||||||
assert.equal(getTitleKey({ e: 1, t: true, to: '0x123' }), 'edit')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return the correct key when getSendEditingTransactionId is falsy and getSelectedToken is truthy', function () {
|
|
||||||
assert.equal(getTitleKey({ e: null, t: 'abc', to: '0x123' }), 'sendTokens')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return the correct key when getSendEditingTransactionId is falsy and getSelectedToken is falsy', function () {
|
|
||||||
assert.equal(getTitleKey({ e: null, to: '0x123' }), 'sendETH')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
@ -23,12 +23,12 @@ import {
|
|||||||
getSendToNickname,
|
getSendToNickname,
|
||||||
getTokenBalance,
|
getTokenBalance,
|
||||||
getQrCodeData,
|
getQrCodeData,
|
||||||
|
getTokens,
|
||||||
} from './send.selectors'
|
} from './send.selectors'
|
||||||
import {
|
import {
|
||||||
getSelectedAddress,
|
getSelectedAddress,
|
||||||
getAddressBook,
|
getAddressBook,
|
||||||
} from '../../selectors'
|
} from '../../selectors'
|
||||||
import { getTokens } from './send-content/add-recipient/add-recipient.selectors'
|
|
||||||
import {
|
import {
|
||||||
updateSendTo,
|
updateSendTo,
|
||||||
updateSendTokenBalance,
|
updateSendTokenBalance,
|
||||||
|
@ -132,6 +132,10 @@ export function getSendErrors (state) {
|
|||||||
return state.send.errors
|
return state.send.errors
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function sendAmountIsInError (state) {
|
||||||
|
return Boolean(state.send.errors.amount)
|
||||||
|
}
|
||||||
|
|
||||||
export function getSendFrom (state) {
|
export function getSendFrom (state) {
|
||||||
return state.metamask.send.from
|
return state.metamask.send.from
|
||||||
}
|
}
|
||||||
@ -192,3 +196,40 @@ export function getUnapprovedTxs (state) {
|
|||||||
export function getQrCodeData (state) {
|
export function getQrCodeData (state) {
|
||||||
return state.appState.qrCodeData
|
return state.appState.qrCodeData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getGasLoadingError (state) {
|
||||||
|
return state.send.errors.gasLoading
|
||||||
|
}
|
||||||
|
|
||||||
|
export function gasFeeIsInError (state) {
|
||||||
|
return Boolean(state.send.errors.gasFee)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getGasButtonGroupShown (state) {
|
||||||
|
return state.send.gasButtonGroupShown
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTokens (state) {
|
||||||
|
return state.metamask.tokens
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTitleKey (state) {
|
||||||
|
const isEditing = Boolean(getSendEditingTransactionId(state))
|
||||||
|
const isToken = Boolean(getSelectedToken(state))
|
||||||
|
|
||||||
|
if (!getSendTo(state)) {
|
||||||
|
return 'addRecipient'
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEditing) {
|
||||||
|
return 'edit'
|
||||||
|
} else if (isToken) {
|
||||||
|
return 'sendTokens'
|
||||||
|
} else {
|
||||||
|
return 'sendETH'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isSendFormInError (state) {
|
||||||
|
return Object.values(getSendErrors(state)).some((n) => n)
|
||||||
|
}
|
||||||
|
@ -23,6 +23,7 @@ import {
|
|||||||
getSelectedTokenExchangeRate,
|
getSelectedTokenExchangeRate,
|
||||||
getSelectedTokenToFiatRate,
|
getSelectedTokenToFiatRate,
|
||||||
getSendAmount,
|
getSendAmount,
|
||||||
|
sendAmountIsInError,
|
||||||
getSendEditingTransactionId,
|
getSendEditingTransactionId,
|
||||||
getSendErrors,
|
getSendErrors,
|
||||||
getSendFrom,
|
getSendFrom,
|
||||||
@ -35,6 +36,12 @@ import {
|
|||||||
getTokenBalance,
|
getTokenBalance,
|
||||||
getTokenExchangeRate,
|
getTokenExchangeRate,
|
||||||
getUnapprovedTxs,
|
getUnapprovedTxs,
|
||||||
|
gasFeeIsInError,
|
||||||
|
getGasLoadingError,
|
||||||
|
getGasButtonGroupShown,
|
||||||
|
getTokens,
|
||||||
|
getTitleKey,
|
||||||
|
isSendFormInError,
|
||||||
} from '../send.selectors.js'
|
} from '../send.selectors.js'
|
||||||
import mockState from './send-selectors-test-data'
|
import mockState from './send-selectors-test-data'
|
||||||
|
|
||||||
@ -520,4 +527,184 @@ describe('send selectors', function () {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('send-amount-row selectors', function () {
|
||||||
|
|
||||||
|
describe('sendAmountIsInError()', function () {
|
||||||
|
it('should return true if send.errors.amount is truthy', function () {
|
||||||
|
const state = {
|
||||||
|
send: {
|
||||||
|
errors: {
|
||||||
|
amount: 'abc',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.equal(sendAmountIsInError(state), true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return false if send.errors.amount is falsy', function () {
|
||||||
|
const state = {
|
||||||
|
send: {
|
||||||
|
errors: {
|
||||||
|
amount: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.equal(sendAmountIsInError(state), false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('send-gas-row selectors', function () {
|
||||||
|
|
||||||
|
describe('getGasLoadingError()', function () {
|
||||||
|
it('should return send.errors.gasLoading', function () {
|
||||||
|
const state = {
|
||||||
|
send: {
|
||||||
|
errors: {
|
||||||
|
gasLoading: 'abc',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.equal(getGasLoadingError(state), 'abc')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('gasFeeIsInError()', function () {
|
||||||
|
it('should return true if send.errors.gasFee is truthy', function () {
|
||||||
|
const state = {
|
||||||
|
send: {
|
||||||
|
errors: {
|
||||||
|
gasFee: 'def',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.equal(gasFeeIsInError(state), true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return false send.errors.gasFee is falsely', function () {
|
||||||
|
const state = {
|
||||||
|
send: {
|
||||||
|
errors: {
|
||||||
|
gasFee: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.equal(gasFeeIsInError(state), false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('getGasButtonGroupShown()', function () {
|
||||||
|
it('should return send.gasButtonGroupShown', function () {
|
||||||
|
const state = {
|
||||||
|
send: {
|
||||||
|
gasButtonGroupShown: 'foobar',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.equal(getGasButtonGroupShown(state), 'foobar')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('add-recipient selectors', function () {
|
||||||
|
describe('getTokens()', function () {
|
||||||
|
it('should return empty array if no tokens in state', function () {
|
||||||
|
const state = {
|
||||||
|
metamask: {
|
||||||
|
tokens: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.deepStrictEqual(getTokens(state), [])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('send-header selectors', function () {
|
||||||
|
|
||||||
|
const getMetamaskSendMockState = (send) => {
|
||||||
|
return {
|
||||||
|
metamask: {
|
||||||
|
send: { ...send },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('getTitleKey()', function () {
|
||||||
|
it('should return the correct key when "to" is empty', function () {
|
||||||
|
assert.equal(getTitleKey(getMetamaskSendMockState({})), 'addRecipient')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return the correct key when getSendEditingTransactionId is truthy', function () {
|
||||||
|
assert.equal(
|
||||||
|
getTitleKey(
|
||||||
|
getMetamaskSendMockState({
|
||||||
|
to: true,
|
||||||
|
editingTransactionId: true,
|
||||||
|
token: true, // this can be whatever
|
||||||
|
})
|
||||||
|
), 'edit')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return the correct key when getSendEditingTransactionId is falsy and getSelectedToken is truthy', function () {
|
||||||
|
assert.equal(
|
||||||
|
getTitleKey(
|
||||||
|
getMetamaskSendMockState({
|
||||||
|
to: true,
|
||||||
|
editingTransactionId: false,
|
||||||
|
token: true,
|
||||||
|
})
|
||||||
|
), 'sendTokens')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return the correct key when getSendEditingTransactionId is falsy and getSelectedToken is falsy', function () {
|
||||||
|
assert.equal(
|
||||||
|
getTitleKey(
|
||||||
|
getMetamaskSendMockState({
|
||||||
|
to: true,
|
||||||
|
editingTransactionId: false,
|
||||||
|
token: false,
|
||||||
|
})
|
||||||
|
), 'sendETH')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('send-footer selectors', function () {
|
||||||
|
|
||||||
|
const getSendMockState = (send) => {
|
||||||
|
return {
|
||||||
|
send: { ...send },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('isSendFormInError()', function () {
|
||||||
|
it('should return true if any of the values of the object returned by getSendErrors are truthy', function () {
|
||||||
|
assert.equal(isSendFormInError(
|
||||||
|
getSendMockState({
|
||||||
|
errors: [ true ],
|
||||||
|
})
|
||||||
|
), true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return false if all of the values of the object returned by getSendErrors are falsy', function () {
|
||||||
|
assert.equal(isSendFormInError(
|
||||||
|
getSendMockState({
|
||||||
|
errors: [],
|
||||||
|
})
|
||||||
|
), false)
|
||||||
|
assert.equal(isSendFormInError(
|
||||||
|
getSendMockState({
|
||||||
|
errors: [ false ],
|
||||||
|
})
|
||||||
|
), false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -2,7 +2,7 @@ import {
|
|||||||
INITIALIZE_CREATE_PASSWORD_ROUTE,
|
INITIALIZE_CREATE_PASSWORD_ROUTE,
|
||||||
INITIALIZE_IMPORT_WITH_SEED_PHRASE_ROUTE,
|
INITIALIZE_IMPORT_WITH_SEED_PHRASE_ROUTE,
|
||||||
DEFAULT_ROUTE,
|
DEFAULT_ROUTE,
|
||||||
} from '../../helpers/constants/routes'
|
} from '../helpers/constants/routes'
|
||||||
|
|
||||||
export function getFirstTimeFlowTypeRoute (state) {
|
export function getFirstTimeFlowTypeRoute (state) {
|
||||||
const { firstTimeFlowType } = state.metamask
|
const { firstTimeFlowType } = state.metamask
|
@ -1,5 +1,6 @@
|
|||||||
export * from './confirm-transaction'
|
export * from './confirm-transaction'
|
||||||
export * from './custom-gas'
|
export * from './custom-gas'
|
||||||
|
export * from './first-time-flow'
|
||||||
export * from './permissions'
|
export * from './permissions'
|
||||||
export * from './selectors'
|
export * from './selectors'
|
||||||
export * from './tokens'
|
export * from './tokens'
|
||||||
|
@ -256,10 +256,6 @@ export function getSendAmount (state) {
|
|||||||
return state.metamask.send.amount
|
return state.metamask.send.amount
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getSendMaxModeState (state) {
|
|
||||||
return state.metamask.send.maxModeOn
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getCurrentCurrency (state) {
|
export function getCurrentCurrency (state) {
|
||||||
return state.metamask.currentCurrency
|
return state.metamask.currentCurrency
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user