mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Split WalletView into component and container files (#7546)
This commit is contained in:
parent
1ffaa330ad
commit
2b4c99e031
@ -1,178 +0,0 @@
|
||||
const Component = require('react').Component
|
||||
const PropTypes = require('prop-types')
|
||||
const connect = require('react-redux').connect
|
||||
const h = require('react-hyperscript')
|
||||
const { withRouter } = require('react-router-dom')
|
||||
const { compose } = require('recompose')
|
||||
const inherits = require('util').inherits
|
||||
const { checksumAddress } = require('../../helpers/utils/util')
|
||||
// const AccountDropdowns = require('./dropdowns/index.js').AccountDropdowns
|
||||
const actions = require('../../store/actions')
|
||||
import BalanceComponent from '../ui/balance'
|
||||
const TokenList = require('./token-list')
|
||||
const selectors = require('../../selectors/selectors')
|
||||
const { ADD_TOKEN_ROUTE } = require('../../helpers/constants/routes')
|
||||
|
||||
import AddTokenButton from './add-token-button'
|
||||
import AccountDetails from './account-details'
|
||||
|
||||
module.exports = compose(
|
||||
withRouter,
|
||||
connect(mapStateToProps, mapDispatchToProps)
|
||||
)(WalletView)
|
||||
|
||||
WalletView.contextTypes = {
|
||||
t: PropTypes.func,
|
||||
metricsEvent: PropTypes.func,
|
||||
}
|
||||
|
||||
WalletView.defaultProps = {
|
||||
responsiveDisplayClassname: '',
|
||||
}
|
||||
|
||||
function mapStateToProps (state) {
|
||||
|
||||
return {
|
||||
network: state.metamask.network,
|
||||
sidebarOpen: state.appState.sidebar.isOpen,
|
||||
identities: state.metamask.identities,
|
||||
accounts: selectors.getMetaMaskAccounts(state),
|
||||
keyrings: state.metamask.keyrings,
|
||||
selectedAddress: selectors.getSelectedAddress(state),
|
||||
selectedAccount: selectors.getSelectedAccount(state),
|
||||
selectedTokenAddress: state.metamask.selectedTokenAddress,
|
||||
}
|
||||
}
|
||||
|
||||
function mapDispatchToProps (dispatch) {
|
||||
return {
|
||||
showSendPage: () => dispatch(actions.showSendPage()),
|
||||
hideSidebar: () => dispatch(actions.hideSidebar()),
|
||||
unsetSelectedToken: () => dispatch(actions.setSelectedToken()),
|
||||
showAddTokenPage: () => dispatch(actions.showAddTokenPage()),
|
||||
}
|
||||
}
|
||||
|
||||
inherits(WalletView, Component)
|
||||
function WalletView () {
|
||||
Component.call(this)
|
||||
}
|
||||
|
||||
WalletView.prototype.renderWalletBalance = function () {
|
||||
const {
|
||||
selectedTokenAddress,
|
||||
selectedAccount,
|
||||
unsetSelectedToken,
|
||||
hideSidebar,
|
||||
sidebarOpen,
|
||||
} = this.props
|
||||
|
||||
const selectedClass = selectedTokenAddress
|
||||
? ''
|
||||
: 'wallet-balance-wrapper--active'
|
||||
const className = `flex-column wallet-balance-wrapper ${selectedClass}`
|
||||
|
||||
return h('div', { className }, [
|
||||
h('div.wallet-balance',
|
||||
{
|
||||
onClick: () => {
|
||||
unsetSelectedToken()
|
||||
selectedTokenAddress && sidebarOpen && hideSidebar()
|
||||
},
|
||||
},
|
||||
[
|
||||
h(BalanceComponent, {
|
||||
balanceValue: selectedAccount ? selectedAccount.balance : '',
|
||||
style: {},
|
||||
}),
|
||||
]
|
||||
),
|
||||
])
|
||||
}
|
||||
|
||||
WalletView.prototype.renderAddToken = function () {
|
||||
const {
|
||||
sidebarOpen,
|
||||
hideSidebar,
|
||||
history,
|
||||
} = this.props
|
||||
const { metricsEvent } = this.context
|
||||
|
||||
return h(AddTokenButton, {
|
||||
onClick () {
|
||||
history.push(ADD_TOKEN_ROUTE)
|
||||
metricsEvent({
|
||||
eventOpts: {
|
||||
category: 'Navigation',
|
||||
action: 'Token Menu',
|
||||
name: 'Clicked "Add Token"',
|
||||
},
|
||||
})
|
||||
if (sidebarOpen) {
|
||||
hideSidebar()
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
WalletView.prototype.render = function () {
|
||||
const {
|
||||
responsiveDisplayClassname,
|
||||
selectedAddress,
|
||||
keyrings,
|
||||
identities,
|
||||
network,
|
||||
} = this.props
|
||||
// temporary logs + fake extra wallets
|
||||
|
||||
const checksummedAddress = checksumAddress(selectedAddress, network)
|
||||
|
||||
if (!selectedAddress) {
|
||||
throw new Error('selectedAddress should not be ' + String(selectedAddress))
|
||||
}
|
||||
|
||||
const keyring = keyrings.find((kr) => {
|
||||
return kr.accounts.includes(selectedAddress)
|
||||
})
|
||||
|
||||
let label = ''
|
||||
let type
|
||||
if (keyring) {
|
||||
type = keyring.type
|
||||
if (type !== 'HD Key Tree') {
|
||||
if (type.toLowerCase().search('hardware') !== -1) {
|
||||
label = this.context.t('hardware')
|
||||
} else {
|
||||
label = this.context.t('imported')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return h('div.wallet-view.flex-column', {
|
||||
style: {},
|
||||
className: responsiveDisplayClassname,
|
||||
}, [
|
||||
|
||||
h(AccountDetails, {
|
||||
label,
|
||||
checksummedAddress,
|
||||
name: identities[selectedAddress].name,
|
||||
}),
|
||||
|
||||
this.renderWalletBalance(),
|
||||
|
||||
h(TokenList),
|
||||
|
||||
this.renderAddToken(),
|
||||
])
|
||||
}
|
||||
|
||||
// TODO: Extra wallets, for dev testing. Remove when PRing to master.
|
||||
// const extraWallet = h('div.flex-column.wallet-balance-wrapper', {}, [
|
||||
// h('div.wallet-balance', {}, [
|
||||
// h(BalanceComponent, {
|
||||
// balanceValue: selectedAccount.balance,
|
||||
// style: {},
|
||||
// }),
|
||||
// ]),
|
||||
// ])
|
1
ui/app/components/app/wallet-view/index.js
Normal file
1
ui/app/components/app/wallet-view/index.js
Normal file
@ -0,0 +1 @@
|
||||
export { default } from './wallet-view.container'
|
132
ui/app/components/app/wallet-view/wallet-view.component.js
Normal file
132
ui/app/components/app/wallet-view/wallet-view.component.js
Normal file
@ -0,0 +1,132 @@
|
||||
import classnames from 'classnames'
|
||||
import PropTypes from 'prop-types'
|
||||
import React, { Component } from 'react'
|
||||
import BalanceComponent from '../../ui/balance'
|
||||
import AddTokenButton from '../add-token-button'
|
||||
import AccountDetails from '../account-details'
|
||||
|
||||
const { checksumAddress } = require('../../../helpers/utils/util')
|
||||
const TokenList = require('../token-list')
|
||||
const { ADD_TOKEN_ROUTE } = require('../../../helpers/constants/routes')
|
||||
|
||||
export default class WalletView extends Component {
|
||||
static contextTypes = {
|
||||
t: PropTypes.func,
|
||||
metricsEvent: PropTypes.func,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
responsiveDisplayClassname: '',
|
||||
selectedAccount: null,
|
||||
selectedTokenAddress: null,
|
||||
}
|
||||
|
||||
static propTypes = {
|
||||
selectedTokenAddress: PropTypes.string,
|
||||
selectedAccount: PropTypes.object,
|
||||
selectedAddress: PropTypes.string.isRequired,
|
||||
keyrings: PropTypes.array.isRequired,
|
||||
responsiveDisplayClassname: PropTypes.string,
|
||||
identities: PropTypes.object.isRequired,
|
||||
history: PropTypes.object.isRequired,
|
||||
unsetSelectedToken: PropTypes.func.isRequired,
|
||||
sidebarOpen: PropTypes.bool.isRequired,
|
||||
hideSidebar: PropTypes.func.isRequired,
|
||||
}
|
||||
|
||||
renderWalletBalance () {
|
||||
const {
|
||||
selectedTokenAddress,
|
||||
selectedAccount,
|
||||
unsetSelectedToken,
|
||||
hideSidebar,
|
||||
sidebarOpen,
|
||||
} = this.props
|
||||
|
||||
return (
|
||||
<div className={classnames('flex-column', 'wallet-balance-wrapper', {
|
||||
'wallet-balance-wrapper--active': Boolean(selectedTokenAddress),
|
||||
})}>
|
||||
<div
|
||||
className="wallet-balance"
|
||||
onClick={() => {
|
||||
unsetSelectedToken()
|
||||
selectedTokenAddress && sidebarOpen && hideSidebar()
|
||||
}}
|
||||
>
|
||||
<BalanceComponent
|
||||
balanceValue={selectedAccount ? selectedAccount.balance : ''}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
renderAddToken () {
|
||||
const {
|
||||
sidebarOpen,
|
||||
hideSidebar,
|
||||
history,
|
||||
} = this.props
|
||||
const { metricsEvent } = this.context
|
||||
|
||||
return (
|
||||
<AddTokenButton
|
||||
onClick={() => {
|
||||
history.push(ADD_TOKEN_ROUTE)
|
||||
metricsEvent({
|
||||
eventOpts: {
|
||||
category: 'Navigation',
|
||||
action: 'Token Menu',
|
||||
name: 'Clicked "Add Token"',
|
||||
},
|
||||
})
|
||||
if (sidebarOpen) {
|
||||
hideSidebar()
|
||||
}
|
||||
}}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
render () {
|
||||
const {
|
||||
responsiveDisplayClassname,
|
||||
selectedAddress,
|
||||
keyrings,
|
||||
identities,
|
||||
} = this.props
|
||||
|
||||
const checksummedAddress = checksumAddress(selectedAddress)
|
||||
|
||||
const keyring = keyrings.find((kr) => {
|
||||
return kr.accounts.includes(selectedAddress)
|
||||
})
|
||||
|
||||
let label = ''
|
||||
let type
|
||||
if (keyring) {
|
||||
type = keyring.type
|
||||
if (type !== 'HD Key Tree') {
|
||||
if (type.toLowerCase().search('hardware') !== -1) {
|
||||
label = this.context.t('hardware')
|
||||
} else {
|
||||
label = this.context.t('imported')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={classnames('wallet-view', 'flex-column', responsiveDisplayClassname)}>
|
||||
<AccountDetails
|
||||
label={label}
|
||||
checksummedAddress={checksummedAddress}
|
||||
name={identities[selectedAddress].name}
|
||||
/>
|
||||
{this.renderWalletBalance()}
|
||||
<TokenList />
|
||||
{this.renderAddToken()}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
33
ui/app/components/app/wallet-view/wallet-view.container.js
Normal file
33
ui/app/components/app/wallet-view/wallet-view.container.js
Normal file
@ -0,0 +1,33 @@
|
||||
import { connect } from 'react-redux'
|
||||
import { withRouter } from 'react-router-dom'
|
||||
import { compose } from 'recompose'
|
||||
import WalletView from './wallet-view.component'
|
||||
import {showSendPage, hideSidebar, setSelectedToken, showAddTokenPage} from '../../../store/actions'
|
||||
import * as selectors from '../../../selectors/selectors'
|
||||
|
||||
function mapStateToProps (state) {
|
||||
return {
|
||||
network: state.metamask.network,
|
||||
sidebarOpen: state.appState.sidebar.isOpen,
|
||||
identities: state.metamask.identities,
|
||||
accounts: selectors.getMetaMaskAccounts(state),
|
||||
keyrings: state.metamask.keyrings,
|
||||
selectedAddress: selectors.getSelectedAddress(state),
|
||||
selectedAccount: selectors.getSelectedAccount(state),
|
||||
selectedTokenAddress: state.metamask.selectedTokenAddress,
|
||||
}
|
||||
}
|
||||
|
||||
function mapDispatchToProps (dispatch) {
|
||||
return {
|
||||
showSendPage: () => dispatch(showSendPage()),
|
||||
hideSidebar: () => dispatch(hideSidebar()),
|
||||
unsetSelectedToken: () => dispatch(setSelectedToken()),
|
||||
showAddTokenPage: () => dispatch(showAddTokenPage()),
|
||||
}
|
||||
}
|
||||
|
||||
export default compose(
|
||||
withRouter,
|
||||
connect(mapStateToProps, mapDispatchToProps)
|
||||
)(WalletView)
|
Loading…
Reference in New Issue
Block a user