Tokens.js 2.27 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 } from 'fether-ui';
import { accountsInfo$ } from '@parity/light.js';
import light from '@parity/light.js-react';
import { Link, Redirect, Route, Switch, withRouter } from 'react-router-dom';
import Health from '../Health';
import Send from '../Send';
import TokensList from './TokensList';
import Whitelist from '../Whitelist';
import { provideTokens } from '../contexts/TokensContext.js';
import { consumeAccount } from '../contexts/AccountContext.js';
Axel Chalon's avatar
Axel Chalon committed
@consumeAccount
@provideTokens
@light({
Axel Chalon's avatar
Axel Chalon committed
  accountsInfo: accountsInfo$
class Tokens extends PureComponent {
  handleGoToWhitelist = () => {
Axel Chalon's avatar
Axel Chalon committed
    this.props.history.push(`/tokens/${this.props.accountAddress}/whitelist`);
Axel Chalon's avatar
Axel Chalon committed
  renderTokensList = () => {
    const { accountsInfo, accountAddress } = this.props;
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) {
Amaury Martiny's avatar
Amaury Martiny committed
    return (
      <div>
        <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
            <Link to='/accounts' className='icon -back'>
              Back
            </Link>
Axel Chalon's avatar
Axel Chalon committed
        <TokensList />
        <nav className='footer-nav'>
          <div className='footer-nav_status'>
            <Health />
          </div>
          <div className='footer-nav_icons'>
            <button className='button -tiny' onClick={this.handleGoToWhitelist}>
Amaury Martiny's avatar
Amaury Martiny committed
              Add tokens
          </div>
        </nav>
Amaury Martiny's avatar
Amaury Martiny committed
    );
Axel Chalon's avatar
Axel Chalon committed
  };

Axel Chalon's avatar
Axel Chalon committed
    const {
      match: { url }
    } = this.props;

    return (
      <Switch>
Axel Chalon's avatar
Axel Chalon committed
        <Route path={`${url}/whitelist`} component={Whitelist} />
Axel Chalon's avatar
Axel Chalon committed
        <Route path={`${url}/send`} component={Send} />
        <Route path={url}>{this.renderTokensList}</Route>
      </Switch>
    );
Amaury Martiny's avatar
Amaury Martiny committed
  }
Amaury Martiny's avatar
Amaury Martiny committed
export default Tokens;