Tokens.js 2.68 KiB
Newer Older
Amaury Martiny's avatar
Amaury Martiny committed
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
// This file is part of Parity.
Amaury Martiny's avatar
Amaury Martiny committed
//
Amaury Martiny's avatar
Amaury Martiny committed
// SPDX-License-Identifier: BSD-3-Clause
import React, { PureComponent } from 'react';
import { AccountHeader, MenuPopup } from 'fether-ui';
YJ's avatar
YJ committed
import { accountsInfo$ } from '@parity/light.js';
import light from '@parity/light.js-react';
import { Link, Redirect, withRouter } from 'react-router-dom';
YJ's avatar
YJ committed
import Health from '../Health';
import TokensList from './TokensList';
import withAccount from '../utils/withAccount';
YJ's avatar
YJ committed

@withAccount
@light({
Axel Chalon's avatar
Axel Chalon committed
  accountsInfo: accountsInfo$
class Tokens extends PureComponent {

  handleToggleMenu = () => {
    const { isMenuOpen } = this.state;
    this.setState({ isMenuOpen: !isMenuOpen });
  };

  handleMenuRef = menuNode => this.setState({ menuNode });

  handleGoToLink = url => {
    this.props.history.push(url);
YJ's avatar
YJ committed
  };

  menuItems = () => {
    const { accountAddress } = this.props;

    return [
      {
        name: 'Backup Account',
        url: `/backup/${accountAddress}`
      },
      {
        name: 'Add tokens',
        url: `/whitelist/${accountAddress}`
      }
    ];
YJ's avatar
YJ committed
  render () {
Axel Chalon's avatar
Axel Chalon committed
    const { accountsInfo, accountAddress } = this.props;
    const { isMenuOpen, menuNode } = this.state;
Amaury Martiny's avatar
Amaury Martiny committed
    // If the accountsInfo object is empty (i.e. no accounts), then we redirect
    // to the accounts page to create an account
    if (accountsInfo && !Object.keys(accountsInfo).length) {
YJ's avatar
YJ committed
      return <Redirect to='/accounts/new' />;
Amaury Martiny's avatar
Amaury Martiny committed
    return (
      <div className='tokens'>
        <div className={isMenuOpen ? 'popup-underlay' : ''} />
        <MenuPopup
          className='popup-menu-account'
          context={menuNode}
          handleGoToLink={this.handleGoToLink}
          horizontalOffset={1}
          menuItems={this.menuItems()}
          onClose={this.handleToggleMenu}
          open={isMenuOpen}
          size='small'
        />
        <AccountHeader
Axel Chalon's avatar
Axel Chalon committed
          address={accountAddress}
          copyAddress
          name={
            accountsInfo &&
Axel Chalon's avatar
Axel Chalon committed
            accountsInfo[accountAddress] &&
            accountsInfo[accountAddress].name
YJ's avatar
YJ committed
            <Link to='/accounts' className='icon -back'>
              Back
            </Link>
              className='icon -menu'
              ref={this.handleMenuRef}
              onClick={this.handleToggleMenu}
            >
              Menu
            </a>
          }
Axel Chalon's avatar
Axel Chalon committed
        <TokensList />
YJ's avatar
YJ committed
        <nav className='footer-nav'>
          <div className='footer-nav_status'>
            <Health />
          </div>
        </nav>
Amaury Martiny's avatar
Amaury Martiny committed
export default Tokens;