|
|
|
const inherits = require('util').inherits
|
|
|
|
const Component = require('react').Component
|
|
|
|
const connect = require('react-redux').connect
|
|
|
|
const h = require('react-hyperscript')
|
|
|
|
const actions = require('../../actions')
|
|
|
|
const { Menu, Item, Divider, CloseArea } = require('../dropdowns/components/menu')
|
|
|
|
const Identicon = require('../identicon')
|
|
|
|
const { formatBalance } = require('../../util')
|
|
|
|
|
|
|
|
module.exports = connect(mapStateToProps, mapDispatchToProps)(AccountMenu)
|
|
|
|
|
|
|
|
inherits(AccountMenu, Component)
|
|
|
|
function AccountMenu () { Component.call(this) }
|
|
|
|
|
|
|
|
function mapStateToProps (state) {
|
|
|
|
return {
|
|
|
|
selectedAddress: state.metamask.selectedAddress,
|
|
|
|
isAccountMenuOpen: state.metamask.isAccountMenuOpen,
|
|
|
|
keyrings: state.metamask.keyrings,
|
|
|
|
identities: state.metamask.identities,
|
|
|
|
accounts: state.metamask.accounts,
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// identities, accounts, selected, menuItemStyles, actions, keyrings
|
|
|
|
|
|
|
|
function mapDispatchToProps (dispatch) {
|
|
|
|
return {
|
|
|
|
toggleAccountMenu: () => dispatch(actions.toggleAccountMenu()),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
AccountMenu.prototype.render = function () {
|
|
|
|
const { isAccountMenuOpen, toggleAccountMenu } = this.props
|
|
|
|
|
|
|
|
return h(Menu, { className: 'account-menu', isShowing: isAccountMenuOpen }, [
|
|
|
|
h(CloseArea, { onClick: toggleAccountMenu }),
|
|
|
|
h(Item, { className: 'account-menu__header' }, [
|
|
|
|
'My Accounts',
|
|
|
|
h('button.account-menu__logout-button', 'Log out'),
|
|
|
|
]),
|
|
|
|
h(Divider),
|
|
|
|
h('div.account-menu__accounts', this.renderAccounts()),
|
|
|
|
h(Divider),
|
|
|
|
h(Item, {
|
|
|
|
onClick: true,
|
|
|
|
icon: h('img', { src: 'images/plus-btn-white.svg' }),
|
|
|
|
text: 'Create Account',
|
|
|
|
}),
|
|
|
|
h(Item, {
|
|
|
|
onClick: true,
|
|
|
|
icon: h('img', { src: 'images/import-account.svg' }),
|
|
|
|
text: 'Import Account',
|
|
|
|
}),
|
|
|
|
h(Divider),
|
|
|
|
h(Item, {
|
|
|
|
onClick: true,
|
|
|
|
icon: h('img', { src: 'images/mm-info-icon.svg' }),
|
|
|
|
text: 'Info & Help',
|
|
|
|
}),
|
|
|
|
h(Item, {
|
|
|
|
onClick: true,
|
|
|
|
icon: h('img', { src: 'images/settings.svg' }),
|
|
|
|
text: 'Settings',
|
|
|
|
}),
|
|
|
|
])
|
|
|
|
}
|
|
|
|
|
|
|
|
AccountMenu.prototype.renderAccounts = function () {
|
|
|
|
const { identities, accounts, selected, actions, keyrings } = this.props
|
|
|
|
|
|
|
|
return Object.keys(identities).map((key, index) => {
|
|
|
|
const identity = identities[key]
|
|
|
|
const isSelected = identity.address === selected
|
|
|
|
|
|
|
|
const balanceValue = accounts[key].balance
|
|
|
|
const formattedBalance = balanceValue ? formatBalance(balanceValue, 6) : '...'
|
|
|
|
const simpleAddress = identity.address.substring(2).toLowerCase()
|
|
|
|
|
|
|
|
const keyring = keyrings.find((kr) => {
|
|
|
|
return kr.accounts.includes(simpleAddress) ||
|
|
|
|
kr.accounts.includes(identity.address)
|
|
|
|
})
|
|
|
|
|
|
|
|
return h(
|
|
|
|
'div.account-menu__account',
|
|
|
|
{
|
|
|
|
onClick: () => {
|
|
|
|
this.props.actions.showAccountDetail(identity.address)
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[
|
|
|
|
h('div.account-menu__check-mark', [
|
|
|
|
isSelected ? h('i.fa.fa-check') : null,
|
|
|
|
]),
|
|
|
|
|
|
|
|
h(
|
|
|
|
Identicon,
|
|
|
|
{
|
|
|
|
address: identity.address,
|
|
|
|
diameter: 24,
|
|
|
|
},
|
|
|
|
),
|
|
|
|
|
|
|
|
h('div.account-menu__account-info', [
|
|
|
|
|
|
|
|
this.indicateIfLoose(keyring),
|
|
|
|
|
|
|
|
h('div.account-menu__name', {
|
|
|
|
style: {
|
|
|
|
fontSize: '18px',
|
|
|
|
maxWidth: '145px',
|
|
|
|
whiteSpace: 'nowrap',
|
|
|
|
overflow: 'hidden',
|
|
|
|
textOverflow: 'ellipsis',
|
|
|
|
},
|
|
|
|
}, identity.name || ''),
|
|
|
|
|
|
|
|
h('div.account-menu__balance', formattedBalance),
|
|
|
|
]),
|
|
|
|
|
|
|
|
h('div.account-menu__action', {
|
|
|
|
onClick: () => {
|
|
|
|
actions.showEditAccountModal(identity)
|
|
|
|
},
|
|
|
|
}, 'Edit'),
|
|
|
|
|
|
|
|
// =======
|
|
|
|
// },
|
|
|
|
// ),
|
|
|
|
// this.indicateIfLoose(keyring),
|
|
|
|
// h('span', {
|
|
|
|
// style: {
|
|
|
|
// marginLeft: '20px',
|
|
|
|
// fontSize: '24px',
|
|
|
|
// maxWidth: '145px',
|
|
|
|
// whiteSpace: 'nowrap',
|
|
|
|
// overflow: 'hidden',
|
|
|
|
// textOverflow: 'ellipsis',
|
|
|
|
// },
|
|
|
|
// }, identity.name || ''),
|
|
|
|
// h('span', { style: { marginLeft: '20px', fontSize: '24px' } }, isSelected ? h('.check', '✓') : null),
|
|
|
|
// >>>>>>> master:ui/app/components/account-dropdowns.js
|
|
|
|
],
|
|
|
|
)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
AccountMenu.prototype.indicateIfLoose = function (keyring) {
|
|
|
|
try { // Sometimes keyrings aren't loaded yet:
|
|
|
|
const type = keyring.type
|
|
|
|
const isLoose = type !== 'HD Key Tree'
|
|
|
|
return isLoose ? h('.keyring-label', 'LOOSE') : null
|
|
|
|
} catch (e) { return }
|
|
|
|
}
|