mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Refactor UI
This commit is contained in:
parent
ba5cde0995
commit
6c2730f243
@ -1,266 +0,0 @@
|
|||||||
const { Component } = require('react')
|
|
||||||
const PropTypes = require('prop-types')
|
|
||||||
const h = require('react-hyperscript')
|
|
||||||
const connect = require('react-redux').connect
|
|
||||||
const actions = require('../../../actions')
|
|
||||||
const genAccountLink = require('../../../../lib/account-link.js')
|
|
||||||
const { DEFAULT_ROUTE } = require('../../../routes')
|
|
||||||
const { formatBalance } = require('../../../util')
|
|
||||||
|
|
||||||
class ConnectHardwareForm extends Component {
|
|
||||||
constructor (props, context) {
|
|
||||||
super(props)
|
|
||||||
this.state = {
|
|
||||||
error: null,
|
|
||||||
response: null,
|
|
||||||
btnText: context.t('connectToTrezor'),
|
|
||||||
selectedAccount: '',
|
|
||||||
accounts: [],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
connectToTrezor () {
|
|
||||||
if (this.state.accounts.length) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
this.setState({ btnText: this.context.t('connecting')})
|
|
||||||
this.getPage(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
getPage (page) {
|
|
||||||
this.props
|
|
||||||
.connectHardware('trezor', page)
|
|
||||||
.then(accounts => {
|
|
||||||
if (accounts.length) {
|
|
||||||
this.setState({ accounts: accounts })
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(e => {
|
|
||||||
this.setState({ btnText: this.context.t('connectToTrezor') })
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
unlockAccount () {
|
|
||||||
if (this.state.selectedAccount === '') {
|
|
||||||
return Promise.reject({ error: this.context.t('accountSelectionRequired') })
|
|
||||||
}
|
|
||||||
return this.props.unlockTrezorAccount(this.state.selectedAccount)
|
|
||||||
}
|
|
||||||
|
|
||||||
handleRadioChange = e => {
|
|
||||||
this.setState({
|
|
||||||
selectedAccount: e.target.value,
|
|
||||||
error: null,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
getBalance (address) {
|
|
||||||
// Get the balance
|
|
||||||
const { accounts } = this.props
|
|
||||||
const balanceValue = accounts && accounts[address] ? accounts[address].balance : ''
|
|
||||||
const formattedBalance = balanceValue ? formatBalance(balanceValue, 6) : '...'
|
|
||||||
return formattedBalance
|
|
||||||
}
|
|
||||||
|
|
||||||
renderAccounts () {
|
|
||||||
if (!this.state.accounts.length) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
return h('div.hw-account-list', [
|
|
||||||
h('div.hw-account-list__title_wrapper', [
|
|
||||||
h('div.hw-account-list__title', {}, [this.context.t('selectAnAddress')]),
|
|
||||||
h('div.hw-account-list__device', {}, ['Trezor - ETH']),
|
|
||||||
]),
|
|
||||||
this.state.accounts.map((a, i) => {
|
|
||||||
|
|
||||||
return h('div.hw-account-list__item', { key: a.address }, [
|
|
||||||
h('span.hw-account-list__item__index', a.index + 1),
|
|
||||||
h('div.hw-account-list__item__radio', [
|
|
||||||
h('input', {
|
|
||||||
type: 'radio',
|
|
||||||
name: 'selectedAccount',
|
|
||||||
id: `address-${i}`,
|
|
||||||
value: a.index,
|
|
||||||
onChange: this.handleRadioChange,
|
|
||||||
}),
|
|
||||||
h(
|
|
||||||
'label.hw-account-list__item__label',
|
|
||||||
{
|
|
||||||
htmlFor: `address-${i}`,
|
|
||||||
},
|
|
||||||
`${a.address.slice(0, 4)}...${a.address.slice(-4)}`
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
h('span.hw-account-list__item__balance', `${this.getBalance(a.address)}`),
|
|
||||||
h(
|
|
||||||
'a.hw-account-list__item__link',
|
|
||||||
{
|
|
||||||
href: genAccountLink(a.address, this.props.network),
|
|
||||||
target: '_blank',
|
|
||||||
title: this.context.t('etherscanView'),
|
|
||||||
},
|
|
||||||
h('img', { src: 'images/popout.svg' })
|
|
||||||
),
|
|
||||||
])
|
|
||||||
}),
|
|
||||||
])
|
|
||||||
}
|
|
||||||
|
|
||||||
renderPagination () {
|
|
||||||
if (!this.state.accounts.length) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
return h('div.hw-list-pagination', [
|
|
||||||
h(
|
|
||||||
'button.btn-primary.hw-list-pagination__button',
|
|
||||||
{
|
|
||||||
onClick: () => this.getPage(-1),
|
|
||||||
},
|
|
||||||
`< ${this.context.t('prev')}`
|
|
||||||
),
|
|
||||||
|
|
||||||
h(
|
|
||||||
'button.btn-primary.hw-list-pagination__button',
|
|
||||||
{
|
|
||||||
onClick: () => this.getPage(1),
|
|
||||||
},
|
|
||||||
`${this.context.t('next')} >`
|
|
||||||
),
|
|
||||||
])
|
|
||||||
}
|
|
||||||
|
|
||||||
renderButtons () {
|
|
||||||
if (!this.state.accounts.length) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
const { history } = this.props
|
|
||||||
|
|
||||||
return h('div.new-account-create-form__buttons', {}, [
|
|
||||||
h(
|
|
||||||
'button.btn-default.btn--large.new-account-create-form__button',
|
|
||||||
{
|
|
||||||
onClick: () => history.push(DEFAULT_ROUTE),
|
|
||||||
},
|
|
||||||
[this.context.t('cancel')]
|
|
||||||
),
|
|
||||||
|
|
||||||
h(
|
|
||||||
'button.btn-primary.btn--large.new-account-create-form__button',
|
|
||||||
{
|
|
||||||
onClick: () => {
|
|
||||||
this.unlockAccount(this.state.selectedAccount)
|
|
||||||
.then(() => history.push(DEFAULT_ROUTE))
|
|
||||||
.catch(e => {
|
|
||||||
this.setState({ error: e.error })
|
|
||||||
})
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[this.context.t('unlock')]
|
|
||||||
),
|
|
||||||
])
|
|
||||||
}
|
|
||||||
|
|
||||||
renderError () {
|
|
||||||
return this.state.error
|
|
||||||
? h('span.error', { style: { marginBottom: 40 } }, this.state.error)
|
|
||||||
: null
|
|
||||||
}
|
|
||||||
|
|
||||||
renderConnectButton () {
|
|
||||||
return !this.state.accounts.length
|
|
||||||
? h(
|
|
||||||
'button.btn-primary.btn--large',
|
|
||||||
{ onClick: () => this.connectToTrezor(), style: { margin: 12 } },
|
|
||||||
this.state.btnText
|
|
||||||
)
|
|
||||||
: null
|
|
||||||
}
|
|
||||||
|
|
||||||
renderUnsupportedBrowser () {
|
|
||||||
return (
|
|
||||||
[
|
|
||||||
h('div.hw-unsupported-browser', [
|
|
||||||
h('h3.hw-unsupported-browser__title', {}, this.context.t('browserNotSupported')),
|
|
||||||
h('p.hw-unsupported-browser__msg', {}, this.context.t('chromeRequiredForTrezor')),
|
|
||||||
]),
|
|
||||||
h(
|
|
||||||
'button.btn-primary.btn--large',
|
|
||||||
{ onClick: () => global.platform.openWindow({
|
|
||||||
url: 'https://google.com/chrome',
|
|
||||||
}), style: { margin: 12 } },
|
|
||||||
this.context.t('downloadGoogleChrome')
|
|
||||||
)]
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
renderConnectScreen () {
|
|
||||||
const isChrome = window.navigator.userAgent.search('Chrome') !== -1
|
|
||||||
if (isChrome) {
|
|
||||||
return this.renderConnectButton()
|
|
||||||
} else {
|
|
||||||
return this.renderUnsupportedBrowser()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
|
||||||
return h('div.new-account-create-form', [
|
|
||||||
this.renderError(),
|
|
||||||
this.renderConnectScreen(),
|
|
||||||
this.renderAccounts(),
|
|
||||||
this.renderPagination(),
|
|
||||||
this.renderButtons(),
|
|
||||||
])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ConnectHardwareForm.propTypes = {
|
|
||||||
hideModal: PropTypes.func,
|
|
||||||
showImportPage: PropTypes.func,
|
|
||||||
showConnectPage: PropTypes.func,
|
|
||||||
connectHardware: PropTypes.func,
|
|
||||||
unlockTrezorAccount: PropTypes.func,
|
|
||||||
numberOfExistingAccounts: PropTypes.number,
|
|
||||||
history: PropTypes.object,
|
|
||||||
t: PropTypes.func,
|
|
||||||
network: PropTypes.string,
|
|
||||||
accounts: PropTypes.object,
|
|
||||||
}
|
|
||||||
|
|
||||||
const mapStateToProps = state => {
|
|
||||||
const {
|
|
||||||
metamask: { network, selectedAddress, identities = {}, accounts = [] },
|
|
||||||
} = state
|
|
||||||
const numberOfExistingAccounts = Object.keys(identities).length
|
|
||||||
|
|
||||||
return {
|
|
||||||
network,
|
|
||||||
accounts,
|
|
||||||
address: selectedAddress,
|
|
||||||
numberOfExistingAccounts,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const mapDispatchToProps = dispatch => {
|
|
||||||
return {
|
|
||||||
toCoinbase: address =>
|
|
||||||
dispatch(actions.buyEth({ network: '1', address, amount: 0 })),
|
|
||||||
hideModal: () => dispatch(actions.hideModal()),
|
|
||||||
connectHardware: (deviceName, page) => {
|
|
||||||
return dispatch(actions.connectHardware(deviceName, page))
|
|
||||||
},
|
|
||||||
unlockTrezorAccount: index => {
|
|
||||||
return dispatch(actions.unlockTrezorAccount(index))
|
|
||||||
},
|
|
||||||
showImportPage: () => dispatch(actions.showImportPage()),
|
|
||||||
showConnectPage: () => dispatch(actions.showConnectPage()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ConnectHardwareForm.contextTypes = {
|
|
||||||
t: PropTypes.func,
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = connect(mapStateToProps, mapDispatchToProps)(
|
|
||||||
ConnectHardwareForm
|
|
||||||
)
|
|
@ -0,0 +1,137 @@
|
|||||||
|
const { Component } = require('react')
|
||||||
|
const PropTypes = require('prop-types')
|
||||||
|
const h = require('react-hyperscript')
|
||||||
|
const genAccountLink = require('../../../../lib/account-link.js')
|
||||||
|
const { DEFAULT_ROUTE } = require('../../../routes')
|
||||||
|
const { formatBalance } = require('../../../util')
|
||||||
|
|
||||||
|
export default class AccountList extends Component {
|
||||||
|
constructor (props, context) {
|
||||||
|
super(props)
|
||||||
|
}
|
||||||
|
|
||||||
|
getBalance (address) {
|
||||||
|
// Get the balance
|
||||||
|
const { accounts } = this.props
|
||||||
|
const balanceValue = accounts && accounts[address] ? accounts[address].balance : ''
|
||||||
|
const formattedBalance = balanceValue ? formatBalance(balanceValue, 6) : '...'
|
||||||
|
return formattedBalance
|
||||||
|
}
|
||||||
|
|
||||||
|
renderAccounts () {
|
||||||
|
if (!this.props.accounts.length) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return h('div.hw-account-list', [
|
||||||
|
h('div.hw-account-list__title_wrapper', [
|
||||||
|
h('div.hw-account-list__title', {}, [this.context.t('selectAnAddress')]),
|
||||||
|
h('div.hw-account-list__device', {}, ['Trezor - ETH']),
|
||||||
|
]),
|
||||||
|
this.props.accounts.map((a, i) => {
|
||||||
|
|
||||||
|
return h('div.hw-account-list__item', { key: a.address }, [
|
||||||
|
h('span.hw-account-list__item__index', a.index + 1),
|
||||||
|
h('div.hw-account-list__item__radio', [
|
||||||
|
h('input', {
|
||||||
|
type: 'radio',
|
||||||
|
name: 'selectedAccount',
|
||||||
|
id: `address-${i}`,
|
||||||
|
value: a.index,
|
||||||
|
onChange: (e) => this.props.onAccountChange(e.target.value),
|
||||||
|
}),
|
||||||
|
h(
|
||||||
|
'label.hw-account-list__item__label',
|
||||||
|
{
|
||||||
|
htmlFor: `address-${i}`,
|
||||||
|
},
|
||||||
|
`${a.address.slice(0, 4)}...${a.address.slice(-4)}`
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
h('span.hw-account-list__item__balance', `${this.getBalance(a.address)}`),
|
||||||
|
h(
|
||||||
|
'a.hw-account-list__item__link',
|
||||||
|
{
|
||||||
|
href: genAccountLink(a.address, this.props.network),
|
||||||
|
target: '_blank',
|
||||||
|
title: this.context.t('etherscanView'),
|
||||||
|
},
|
||||||
|
h('img', { src: 'images/popout.svg' })
|
||||||
|
),
|
||||||
|
])
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
renderPagination () {
|
||||||
|
if (!this.state.accounts.length) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
return h('div.hw-list-pagination', [
|
||||||
|
h(
|
||||||
|
'button.btn-primary.hw-list-pagination__button',
|
||||||
|
{
|
||||||
|
onClick: () => this.props.getPage(-1),
|
||||||
|
},
|
||||||
|
`< ${this.context.t('prev')}`
|
||||||
|
),
|
||||||
|
|
||||||
|
h(
|
||||||
|
'button.btn-primary.hw-list-pagination__button',
|
||||||
|
{
|
||||||
|
onClick: () => this.props.getPage(1),
|
||||||
|
},
|
||||||
|
`${this.context.t('next')} >`
|
||||||
|
),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
renderButtons () {
|
||||||
|
if (!this.state.accounts.length) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
const { history } = this.props
|
||||||
|
|
||||||
|
return h('div.new-account-create-form__buttons', {}, [
|
||||||
|
h(
|
||||||
|
'button.btn-default.btn--large.new-account-create-form__button',
|
||||||
|
{
|
||||||
|
onClick: () => history.push(DEFAULT_ROUTE),
|
||||||
|
},
|
||||||
|
[this.context.t('cancel')]
|
||||||
|
),
|
||||||
|
|
||||||
|
h(
|
||||||
|
'button.btn-primary.btn--large.new-account-create-form__button',
|
||||||
|
{
|
||||||
|
onClick: () => {
|
||||||
|
this.unlockAccount(this.state.selectedAccount)
|
||||||
|
.then(() => history.push(DEFAULT_ROUTE))
|
||||||
|
.catch(e => {
|
||||||
|
this.setState({ error: e.error })
|
||||||
|
})
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[this.context.t('unlock')]
|
||||||
|
),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
render () {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AccountList.propTypes = {
|
||||||
|
accounts: PropTypes.object.isRequired,
|
||||||
|
onAccountChange: PropTypes.func.isRequired,
|
||||||
|
getPage: PropTypes.func.isRequired,
|
||||||
|
network: PropTypes.string,
|
||||||
|
history: PropTypes.object,
|
||||||
|
}
|
||||||
|
|
||||||
|
AccountList.contextTypes = {
|
||||||
|
t: PropTypes.func,
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
const { Component } = require('react')
|
||||||
|
const PropTypes = require('prop-types')
|
||||||
|
const h = require('react-hyperscript')
|
||||||
|
|
||||||
|
export default class ConnectScreen extends Component {
|
||||||
|
constructor (props, context) {
|
||||||
|
super(props)
|
||||||
|
}
|
||||||
|
|
||||||
|
connectToTrezor = () => {
|
||||||
|
if (this.props.connectToTrezor) {
|
||||||
|
this.props.connectToTrezor()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
renderUnsupportedBrowser () {
|
||||||
|
return (
|
||||||
|
[
|
||||||
|
h('div.hw-unsupported-browser', [
|
||||||
|
h('h3.hw-unsupported-browser__title', {}, this.context.t('browserNotSupported')),
|
||||||
|
h('p.hw-unsupported-browser__msg', {}, this.context.t('chromeRequiredForTrezor')),
|
||||||
|
]),
|
||||||
|
h(
|
||||||
|
'button.btn-primary.btn--large',
|
||||||
|
{ onClick: () => global.platform.openWindow({
|
||||||
|
url: 'https://google.com/chrome',
|
||||||
|
}), style: { margin: 12 } },
|
||||||
|
this.context.t('downloadGoogleChrome')
|
||||||
|
)]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
renderConnectButton () {
|
||||||
|
return !this.state.accounts.length
|
||||||
|
? h(
|
||||||
|
'button.btn-primary.btn--large',
|
||||||
|
{ onClick: this.connectToTrezor, style: { margin: 12 } },
|
||||||
|
this.props.btnText
|
||||||
|
)
|
||||||
|
: null
|
||||||
|
}
|
||||||
|
|
||||||
|
render () {
|
||||||
|
const isChrome = window.navigator.userAgent.search('Chrome') !== -1
|
||||||
|
if (isChrome) {
|
||||||
|
return this.renderConnectButton()
|
||||||
|
} else {
|
||||||
|
return this.renderUnsupportedBrowser()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ConnectScreen.propTypes = {
|
||||||
|
connectToTrezor: PropTypes.func.isRequired,
|
||||||
|
btnText: PropTypes.string,
|
||||||
|
}
|
||||||
|
|
||||||
|
ConnectScreen.contextTypes = {
|
||||||
|
t: PropTypes.func,
|
||||||
|
}
|
131
ui/app/components/pages/create-account/connect-hardware/index.js
Normal file
131
ui/app/components/pages/create-account/connect-hardware/index.js
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
const { Component } = require('react')
|
||||||
|
const PropTypes = require('prop-types')
|
||||||
|
const h = require('react-hyperscript')
|
||||||
|
const connect = require('react-redux').connect
|
||||||
|
const actions = require('../../../actions')
|
||||||
|
const ConnectScreen = require('./connect-screen')
|
||||||
|
const AccountList = require('./account-list')
|
||||||
|
|
||||||
|
class ConnectHardwareForm extends Component {
|
||||||
|
constructor (props, context) {
|
||||||
|
super(props)
|
||||||
|
this.state = {
|
||||||
|
error: null,
|
||||||
|
response: null,
|
||||||
|
btnText: context.t('connectToTrezor'),
|
||||||
|
selectedAccount: '',
|
||||||
|
accounts: [],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
connectToTrezor = () => {
|
||||||
|
if (this.state.accounts.length) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
this.setState({ btnText: this.context.t('connecting')})
|
||||||
|
this.getPage(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
onAccountChange = (account) => {
|
||||||
|
this.setState({selectedAccount: account, error: null})
|
||||||
|
}
|
||||||
|
|
||||||
|
getPage = (page) => {
|
||||||
|
this.props
|
||||||
|
.connectHardware('trezor', page)
|
||||||
|
.then(accounts => {
|
||||||
|
if (accounts.length) {
|
||||||
|
this.setState({ accounts: accounts })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
this.setState({ btnText: this.context.t('connectToTrezor') })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
unlockAccount () {
|
||||||
|
if (this.state.selectedAccount === '') {
|
||||||
|
return Promise.reject({ error: this.context.t('accountSelectionRequired') })
|
||||||
|
}
|
||||||
|
return this.props.unlockTrezorAccount(this.state.selectedAccount)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
renderError () {
|
||||||
|
return this.state.error
|
||||||
|
? h('span.error', { style: { marginBottom: 40 } }, this.state.error)
|
||||||
|
: null
|
||||||
|
}
|
||||||
|
|
||||||
|
renderContent () {
|
||||||
|
if (!this.state.accounts.length) {
|
||||||
|
return h(ConnectScreen, {
|
||||||
|
connectToTrezor: this.connectToTrezor,
|
||||||
|
btnText: this.state.btnText,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return h(AccountList, {
|
||||||
|
accounts: this.state.accounts,
|
||||||
|
onAccountChange: this.onAccountChange,
|
||||||
|
network: this.props.network,
|
||||||
|
getPage: this.getPage,
|
||||||
|
history: this.props.history,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
render () {
|
||||||
|
return h('div.new-account-create-form', [
|
||||||
|
this.renderError(),
|
||||||
|
this.renderContent(),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ConnectHardwareForm.propTypes = {
|
||||||
|
hideModal: PropTypes.func,
|
||||||
|
showImportPage: PropTypes.func,
|
||||||
|
showConnectPage: PropTypes.func,
|
||||||
|
connectHardware: PropTypes.func,
|
||||||
|
unlockTrezorAccount: PropTypes.func,
|
||||||
|
numberOfExistingAccounts: PropTypes.number,
|
||||||
|
history: PropTypes.object,
|
||||||
|
t: PropTypes.func,
|
||||||
|
network: PropTypes.string,
|
||||||
|
accounts: PropTypes.object,
|
||||||
|
}
|
||||||
|
|
||||||
|
const mapStateToProps = state => {
|
||||||
|
const {
|
||||||
|
metamask: { network, selectedAddress, identities = {}, accounts = [] },
|
||||||
|
} = state
|
||||||
|
const numberOfExistingAccounts = Object.keys(identities).length
|
||||||
|
|
||||||
|
return {
|
||||||
|
network,
|
||||||
|
accounts,
|
||||||
|
address: selectedAddress,
|
||||||
|
numberOfExistingAccounts,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const mapDispatchToProps = dispatch => {
|
||||||
|
return {
|
||||||
|
connectHardware: (deviceName, page) => {
|
||||||
|
return dispatch(actions.connectHardware(deviceName, page))
|
||||||
|
},
|
||||||
|
unlockTrezorAccount: index => {
|
||||||
|
return dispatch(actions.unlockTrezorAccount(index))
|
||||||
|
},
|
||||||
|
showImportPage: () => dispatch(actions.showImportPage()),
|
||||||
|
showConnectPage: () => dispatch(actions.showConnectPage()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ConnectHardwareForm.contextTypes = {
|
||||||
|
t: PropTypes.func,
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = connect(mapStateToProps, mapDispatchToProps)(
|
||||||
|
ConnectHardwareForm
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user