Display correct titles and subtitles on send token and editing send transaction screens.

feature/default_network_editable
Dan 7 years ago
parent 1405237479
commit 5bb399e55a
  1. 7
      app/_locales/en/messages.json
  2. 2
      ui/app/components/pending-tx/confirm-send-token.js
  3. 7
      ui/app/components/send_/send-header/send-header.component.js
  4. 5
      ui/app/components/send_/send-header/send-header.container.js
  5. 37
      ui/app/components/send_/send-header/send-header.selectors.js
  6. 9
      ui/app/components/send_/send-header/tests/send-header-component.test.js
  7. 8
      ui/app/components/send_/send-header/tests/send-header-container.test.js
  8. 47
      ui/app/components/send_/send-header/tests/send-header-selectors.test.js
  9. 4
      ui/app/components/send_/send.component.js

@ -253,6 +253,9 @@
"editAccountName": { "editAccountName": {
"message": "Edit Account Name" "message": "Edit Account Name"
}, },
"editingTransaction": {
"message": "Make changes to your transaction"
},
"emailUs": { "emailUs": {
"message": "Email us!" "message": "Email us!"
}, },
@ -756,6 +759,10 @@
"onlySendToEtherAddress": { "onlySendToEtherAddress": {
"message": "Only send ETH to an Ethereum address." "message": "Only send ETH to an Ethereum address."
}, },
"onlySendTokensToAccountAddress": {
"message": "Only send $1 to an Ethereum account address.",
"description": "displays token symbol"
},
"searchTokens": { "searchTokens": {
"message": "Search Tokens" "message": "Search Tokens"
}, },

@ -107,7 +107,7 @@ function mapDispatchToProps (dispatch, ownProps) {
to, to,
amount: tokenAmountInHex, amount: tokenAmountInHex,
errors: { to: null, amount: null }, errors: { to: null, amount: null },
editingTransactionId: id, editingTransactionId: id && id.toString(),
token: ownProps.token, token: ownProps.token,
})) }))
dispatch(actions.showSendTokenPage()) dispatch(actions.showSendTokenPage())

@ -8,7 +8,8 @@ export default class SendHeader extends Component {
static propTypes = { static propTypes = {
clearSend: PropTypes.func, clearSend: PropTypes.func,
history: PropTypes.object, history: PropTypes.object,
isToken: PropTypes.bool, titleKey: PropTypes.string,
subtitleParams: PropTypes.array,
}; };
onClose () { onClose () {
@ -20,8 +21,8 @@ export default class SendHeader extends Component {
return ( return (
<PageContainerHeader <PageContainerHeader
onClose={() => this.onClose()} onClose={() => this.onClose()}
subtitle={this.context.t('onlySendToEtherAddress')} subtitle={this.context.t(...this.props.subtitleParams)}
title={this.props.isToken ? this.context.t('sendTokens') : this.context.t('sendETH')} title={this.context.t(this.props.titleKey)}
/> />
) )
} }

@ -1,13 +1,14 @@
import { connect } from 'react-redux' import { connect } from 'react-redux'
import { clearSend } from '../../../actions' import { clearSend } from '../../../actions'
import SendHeader from './send-header.component' import SendHeader from './send-header.component'
import { getSelectedToken } from '../../../selectors' import { getSubtitleParams, getTitleKey } from './send-header.selectors'
export default connect(mapStateToProps, mapDispatchToProps)(SendHeader) export default connect(mapStateToProps, mapDispatchToProps)(SendHeader)
function mapStateToProps (state) { function mapStateToProps (state) {
return { return {
isToken: Boolean(getSelectedToken(state)), titleKey: getTitleKey(state),
subtitleParams: getSubtitleParams(state),
} }
} }

@ -0,0 +1,37 @@
const {
getSelectedToken,
getSendEditingTransactionId,
} = require('../send.selectors.js')
const selectors = {
getTitleKey,
getSubtitleParams,
}
module.exports = selectors
function getTitleKey (state) {
const isEditing = Boolean(getSendEditingTransactionId(state))
const isToken = Boolean(getSelectedToken(state))
if (isEditing) {
return 'edit'
} else if (isToken) {
return 'sendTokens'
} else {
return 'sendETH'
}
}
function getSubtitleParams (state) {
const isEditing = Boolean(getSendEditingTransactionId(state))
const token = getSelectedToken(state)
if (isEditing) {
return [ 'editingTransaction' ]
} else if (token) {
return [ 'onlySendTokensToAccountAddress', [ token.symbol ] ]
} else {
return [ 'onlySendToEtherAddress' ]
}
}

@ -23,8 +23,9 @@ describe('SendHeader Component', function () {
wrapper = shallow(<SendHeader wrapper = shallow(<SendHeader
clearSend={propsMethodSpies.clearSend} clearSend={propsMethodSpies.clearSend}
history={historySpies} history={historySpies}
isToken={false} titleKey={'mockTitleKey'}
/>, { context: { t: str => str } }) subtitleParams={[ 'mockSubtitleKey', 'mockVal']}
/>, { context: { t: (str1, str2) => str2 ? str1 + str2 : str1 } })
}) })
afterEach(() => { afterEach(() => {
@ -59,8 +60,8 @@ describe('SendHeader Component', function () {
subtitle, subtitle,
title, title,
} = wrapper.find(PageContainerHeader).props() } = wrapper.find(PageContainerHeader).props()
assert.equal(subtitle, 'onlySendToEtherAddress') assert.equal(subtitle, 'mockSubtitleKeymockVal')
assert.equal(title, 'sendETH') assert.equal(title, 'mockTitleKey')
assert.equal(SendHeader.prototype.onClose.callCount, 0) assert.equal(SendHeader.prototype.onClose.callCount, 0)
onClose() onClose()
assert.equal(SendHeader.prototype.onClose.callCount, 1) assert.equal(SendHeader.prototype.onClose.callCount, 1)

@ -18,7 +18,10 @@ proxyquire('../send-header.container.js', {
}, },
}, },
'../../../actions': actionSpies, '../../../actions': actionSpies,
'../../../selectors': { getSelectedToken: (s) => `mockSelectedToken:${s}` }, './send-header.selectors': {
getTitleKey: (s) => `mockTitleKey:${s}`,
getSubtitleParams: (s) => `mockSubtitleParams:${s}`,
},
}) })
describe('send-header container', () => { describe('send-header container', () => {
@ -27,7 +30,8 @@ describe('send-header container', () => {
it('should map the correct properties to props', () => { it('should map the correct properties to props', () => {
assert.deepEqual(mapStateToProps('mockState'), { assert.deepEqual(mapStateToProps('mockState'), {
isToken: true, titleKey: 'mockTitleKey:mockState',
subtitleParams: 'mockSubtitleParams:mockState',
}) })
}) })

@ -0,0 +1,47 @@
import assert from 'assert'
import proxyquire from 'proxyquire'
const {
getTitleKey,
getSubtitleParams,
} = proxyquire('../send-header.selectors', {
'../send.selectors': {
getSelectedToken: (mockState) => mockState.t,
getSendEditingTransactionId: (mockState) => mockState.e,
},
})
describe('send-header selectors', () => {
describe('getTitleKey()', () => {
it('should return the correct key when getSendEditingTransactionId is truthy', () => {
assert.equal(getTitleKey({ e: 1, t: true }), 'edit')
})
it('should return the correct key when getSendEditingTransactionId is falsy and getSelectedToken is truthy', () => {
assert.equal(getTitleKey({ e: null, t: 'abc' }), 'sendTokens')
})
it('should return the correct key when getSendEditingTransactionId is falsy and getSelectedToken is falsy', () => {
assert.equal(getTitleKey({ e: null }), 'sendETH')
})
})
describe('getSubtitleParams()', () => {
it('should return the correct params when getSendEditingTransactionId is truthy', () => {
assert.deepEqual(getSubtitleParams({ e: 1, t: true }), [ 'editingTransaction' ])
})
it('should return the correct params when getSendEditingTransactionId is falsy and getSelectedToken is truthy', () => {
assert.deepEqual(
getSubtitleParams({ e: null, t: { symbol: 'ABC' } }),
[ 'onlySendTokensToAccountAddress', [ 'ABC' ] ]
)
})
it('should return the correct params when getSendEditingTransactionId is falsy and getSelectedToken is falsy', () => {
assert.deepEqual(getSubtitleParams({ e: null }), [ 'onlySendToEtherAddress' ])
})
})
})

@ -82,7 +82,7 @@ export default class SendTransactionScreen extends PersistentForm {
} = prevProps } = prevProps
const uninitialized = [prevBalance, prevGasTotal].every(n => n === null) const uninitialized = [prevBalance, prevGasTotal].every(n => n === null)
console.log(`@#@# uninitialized`, uninitialized);
if (!uninitialized) { if (!uninitialized) {
const amountErrorRequiresUpdate = doesAmountErrorRequireUpdate({ const amountErrorRequiresUpdate = doesAmountErrorRequireUpdate({
balance, balance,
@ -121,7 +121,7 @@ export default class SendTransactionScreen extends PersistentForm {
componentWillMount () { componentWillMount () {
const { const {
from: { address, balance }, from: { address },
selectedToken, selectedToken,
tokenContract, tokenContract,
updateSendTokenBalance, updateSendTokenBalance,

Loading…
Cancel
Save