1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-23 20:05:27 +02:00
metamask-extension/ui/app/components/account-menu/index.js

157 lines
4.5 KiB
JavaScript
Raw Normal View History

2017-10-13 08:10:58 +02:00
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')
2017-10-16 07:28:25 +02:00
const { Menu, Item, Divider, CloseArea } = require('../dropdowns/components/menu')
const Identicon = require('../identicon')
const { formatBalance } = require('../../util')
2017-10-13 08:10:58 +02:00
module.exports = connect(mapStateToProps, mapDispatchToProps)(AccountMenu)
inherits(AccountMenu, Component)
function AccountMenu () { Component.call(this) }
function mapStateToProps (state) {
return {
selectedAddress: state.metamask.selectedAddress,
2017-10-16 07:28:25 +02:00
isAccountMenuOpen: state.metamask.isAccountMenuOpen,
keyrings: state.metamask.keyrings,
identities: state.metamask.identities,
accounts: state.metamask.accounts,
2017-10-13 08:10:58 +02:00
}
}
2017-10-16 07:28:25 +02:00
// identities, accounts, selected, menuItemStyles, actions, keyrings
function mapDispatchToProps (dispatch) {
return {
toggleAccountMenu: () => dispatch(actions.toggleAccountMenu()),
}
2017-10-13 08:10:58 +02:00
}
AccountMenu.prototype.render = function () {
2017-10-16 07:28:25 +02:00
const { isAccountMenuOpen, toggleAccountMenu } = this.props
return h(Menu, { className: 'account-menu', isShowing: isAccountMenuOpen }, [
h(CloseArea, { onClick: toggleAccountMenu }),
2017-10-13 08:10:58 +02:00
h(Item, { className: 'account-menu__header' }, [
'My Accounts',
h('button.account-menu__logout-button', 'Log out'),
]),
h(Divider),
2017-10-16 07:28:25 +02:00
h('div.account-menu__accounts', this.renderAccounts()),
2017-10-13 08:10:58 +02:00
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',
}),
])
}
2017-10-16 07:28:25 +02:00
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,
]),
2017-10-13 08:10:58 +02:00
2017-10-16 07:28:25 +02:00
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 }
}