nifty-wallet/ui/app/accounts/index.js

152 lines
4.3 KiB
JavaScript
Raw Normal View History

2016-05-23 14:48:01 -07:00
const inherits = require('util').inherits
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 findDOMNode = require('react-dom').findDOMNode
const AccountListItem = require('./account-list-item')
2016-05-23 14:48:01 -07:00
module.exports = connect(mapStateToProps)(AccountsScreen)
2016-06-21 13:18:32 -07:00
function mapStateToProps (state) {
const pendingTxs = valuesFor(state.metamask.unconfTxs)
2016-09-08 12:56:04 -07:00
.filter(tx => tx.txParams.metamaskNetworkId === state.metamask.network)
const pendingMsgs = valuesFor(state.metamask.unconfMsgs)
const pending = pendingTxs.concat(pendingMsgs)
2016-05-23 14:48:01 -07:00
return {
accounts: state.metamask.accounts,
identities: state.metamask.identities,
unconfTxs: state.metamask.unconfTxs,
selectedAddress: state.metamask.selectedAddress,
scrollToBottom: state.appState.scrollToBottom,
pending,
2016-05-23 14:48:01 -07:00
}
}
inherits(AccountsScreen, Component)
2016-06-21 13:18:32 -07:00
function AccountsScreen () {
2016-05-23 14:48:01 -07:00
Component.call(this)
}
2016-06-21 13:18:32 -07:00
AccountsScreen.prototype.render = function () {
2016-05-23 14:48:01 -07:00
var state = this.props
var identityList = valuesFor(state.identities)
var unconfTxList = valuesFor(state.unconfTxs)
2016-11-04 10:48:24 -07:00
2016-05-23 14:48:01 -07:00
return (
h('.accounts-section.flex-grow', [
// subtitle and nav
h('.section-title.flex-center', [
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
2016-11-04 10:48:24 -07:00
onClick: this.goHome.bind(this),
2016-05-23 14:48:01 -07:00
}),
h('h2.page-subtitle', 'Select Account'),
]),
h('hr.horizontal-line'),
// identity selection
h('section.identity-section', {
2016-05-23 14:48:01 -07:00
style: {
height: '418px',
overflowY: 'auto',
overflowX: 'hidden',
2016-06-21 13:18:32 -07:00
},
2016-05-23 14:48:01 -07:00
},
2016-06-21 13:18:32 -07:00
[
identityList.map((identity) => {
const pending = this.props.pending.filter((txOrMsg) => {
if ('txParams' in txOrMsg) {
return txOrMsg.txParams.from === identity.address
} else if ('msgParams' in txOrMsg) {
return txOrMsg.msgParams.from === identity.address
} else {
return false
}
})
return h(AccountListItem, {
2016-06-21 13:18:32 -07:00
key: `acct-panel-${identity.address}`,
identity,
selectedAddress: this.props.selectedAddress,
accounts: this.props.accounts,
onShowDetail: this.onShowDetail.bind(this),
pending,
})
}),
2016-09-12 14:27:26 -07:00
h('hr.horizontal-line'),
2016-06-21 13:18:32 -07:00
h('div.footer.hover-white.pointer', {
key: 'reveal-account-bar',
onClick: () => {
this.addNewAccount()
2016-06-21 13:18:32 -07:00
},
style: {
display: 'flex',
height: '40px',
paddint: '10px',
justifyContent: 'center',
alignItems: 'center',
},
}, [
h('i.fa.fa-plus.fa-lg', {key: ''}),
]),
2016-09-12 14:27:26 -07:00
h('hr.horizontal-line'),
2016-05-23 14:48:01 -07:00
]),
unconfTxList.length ? (
h('.unconftx-link.flex-row.flex-center', {
onClick: this.navigateToConfTx.bind(this),
}, [
h('span', 'Unconfirmed Txs'),
h('i.fa.fa-arrow-right.fa-lg'),
])
) : (
null
),
])
)
}
// If a new account was revealed, scroll to the bottom
2016-06-21 13:18:32 -07:00
AccountsScreen.prototype.componentDidUpdate = function () {
2016-05-23 14:48:01 -07:00
const scrollToBottom = this.props.scrollToBottom
if (scrollToBottom) {
var container = findDOMNode(this)
var scrollable = container.querySelector('.identity-section')
scrollable.scrollTop = scrollable.scrollHeight
}
}
2016-06-21 13:18:32 -07:00
AccountsScreen.prototype.navigateToConfTx = function () {
2016-05-23 14:48:01 -07:00
event.stopPropagation()
this.props.dispatch(actions.showConfTxPage())
}
2016-06-21 13:18:32 -07:00
AccountsScreen.prototype.onSelect = function (address, event) {
2016-05-23 14:48:01 -07:00
event.stopPropagation()
// if already selected, deselect
if (this.props.selectedAddress === address) address = null
this.props.dispatch(actions.setSelectedAddress(address))
}
2016-06-21 13:18:32 -07:00
AccountsScreen.prototype.onShowDetail = function (address, event) {
2016-05-23 14:48:01 -07:00
event.stopPropagation()
this.props.dispatch(actions.showAccountDetail(address))
}
AccountsScreen.prototype.addNewAccount = function () {
this.props.dispatch(actions.addNewAccount(0))
2016-05-23 14:48:01 -07:00
}
2016-06-21 13:18:32 -07:00
AccountsScreen.prototype.goHome = function () {
2016-05-23 14:48:01 -07:00
this.props.dispatch(actions.goHome())
}