|
|
|
const inherits = require('util').inherits
|
|
|
|
const extend = require('xtend')
|
|
|
|
const Component = require('react').Component
|
|
|
|
const h = require('react-hyperscript')
|
|
|
|
const connect = require('react-redux').connect
|
|
|
|
const actions = require('./actions')
|
|
|
|
const valuesFor = require('./util').valuesFor
|
|
|
|
const TransactionList = require('./components/transaction-list')
|
|
|
|
const ExportAccountView = require('./components/account-export')
|
|
|
|
const TabBar = require('./components/tab-bar')
|
|
|
|
const TokenList = require('./components/token-list')
|
|
|
|
|
|
|
|
module.exports = connect(mapStateToProps)(AccountDetailScreen)
|
|
|
|
|
|
|
|
function mapStateToProps (state) {
|
|
|
|
return {
|
|
|
|
metamask: state.metamask,
|
|
|
|
identities: state.metamask.identities,
|
|
|
|
accounts: state.metamask.accounts,
|
|
|
|
address: state.metamask.selectedAddress,
|
|
|
|
accountDetail: state.appState.accountDetail,
|
|
|
|
network: state.metamask.network,
|
|
|
|
unapprovedMsgs: valuesFor(state.metamask.unapprovedMsgs),
|
|
|
|
shapeShiftTxList: state.metamask.shapeShiftTxList,
|
|
|
|
transactions: state.metamask.selectedAddressTxList || [],
|
|
|
|
conversionRate: state.metamask.conversionRate,
|
|
|
|
currentCurrency: state.metamask.currentCurrency,
|
|
|
|
currentAccountTab: state.metamask.currentAccountTab,
|
|
|
|
tokens: state.metamask.tokens,
|
|
|
|
computedBalances: state.metamask.computedBalances,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
inherits(AccountDetailScreen, Component)
|
|
|
|
function AccountDetailScreen () {
|
|
|
|
Component.call(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Note: This component is no longer used. Leaving the file for reference:
|
|
|
|
// - structuring routing for add token
|
|
|
|
// - state required for TxList
|
|
|
|
// Delete file when those features are complete
|
|
|
|
AccountDetailScreen.prototype.render = function () {}
|
|
|
|
|
|
|
|
AccountDetailScreen.prototype.subview = function () {
|
|
|
|
var subview
|
|
|
|
try {
|
|
|
|
subview = this.props.accountDetail.subview
|
|
|
|
} catch (e) {
|
|
|
|
subview = null
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (subview) {
|
|
|
|
case 'transactions':
|
|
|
|
return this.tabSections()
|
|
|
|
case 'export':
|
|
|
|
var state = extend({key: 'export'}, this.props)
|
|
|
|
return h(ExportAccountView, state)
|
|
|
|
default:
|
|
|
|
return this.tabSections()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
AccountDetailScreen.prototype.tabSections = function () {
|
|
|
|
const { currentAccountTab } = this.props
|
|
|
|
|
|
|
|
return h('section.tabSection.full-flex-height.grow-tenx', [
|
|
|
|
|
|
|
|
h(TabBar, {
|
|
|
|
tabs: [
|
|
|
|
{ content: 'Sent', key: 'history' },
|
|
|
|
{ content: 'Tokens', key: 'tokens' },
|
|
|
|
],
|
|
|
|
defaultTab: currentAccountTab || 'history',
|
|
|
|
tabSelected: (key) => {
|
|
|
|
this.props.dispatch(actions.setCurrentAccountTab(key))
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
|
|
|
|
this.tabSwitchView(),
|
|
|
|
])
|
|
|
|
}
|
|
|
|
|
|
|
|
AccountDetailScreen.prototype.tabSwitchView = function () {
|
|
|
|
const props = this.props
|
|
|
|
const { address, network } = props
|
|
|
|
const { currentAccountTab, tokens } = this.props
|
|
|
|
|
|
|
|
switch (currentAccountTab) {
|
|
|
|
case 'tokens':
|
|
|
|
return h(TokenList, {
|
|
|
|
userAddress: address,
|
|
|
|
network,
|
|
|
|
tokens,
|
|
|
|
addToken: () => this.props.dispatch(actions.showAddTokenPage()),
|
|
|
|
})
|
|
|
|
default:
|
|
|
|
return this.transactionList()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
AccountDetailScreen.prototype.transactionList = function () {
|
|
|
|
const {transactions, unapprovedMsgs, address,
|
|
|
|
network, shapeShiftTxList, conversionRate } = this.props
|
|
|
|
|
|
|
|
return h(TransactionList, {
|
|
|
|
transactions: transactions.sort((a, b) => b.time - a.time),
|
|
|
|
network,
|
|
|
|
unapprovedMsgs,
|
|
|
|
conversionRate,
|
|
|
|
address,
|
|
|
|
shapeShiftTxList,
|
|
|
|
viewPendingTx: (txId) => {
|
|
|
|
this.props.dispatch(actions.viewPendingTx(txId))
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|