aboutsummaryrefslogblamecommitdiffstats
path: root/ui/app/components/account-menu/index.js
blob: 3b111827199ef52ee24a700a68f74f034cd31c06 (plain) (tree)
1
2
3
4
5
6
7
8




                                              


                                                                                  








                                                                          




                                                        


   





                                                                    


                                            



                                                                               




                                                         
                                                           
























                                                           


























                                                                                  
 


























































                                                                                                                    
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 }
}