AccountsList.js 2.7 KiB
Newer Older
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
// This file is part of Parity.
//
Amaury Martiny's avatar
Amaury Martiny committed
// SPDX-License-Identifier: BSD-3-Clause
Axel Chalon's avatar
Axel Chalon committed
import React, { Component } from 'react';
import { AccountCard, Header } from 'fether-ui';
import { accountsInfo$, withoutLoading } from '@parity/light.js';
Axel Chalon's avatar
Axel Chalon committed
import { inject, observer } from 'mobx-react';
import light from '@parity/light.js-react';
Axel Chalon's avatar
Axel Chalon committed
import Health from '../../Health';
  accountsInfo: () => accountsInfo$().pipe(withoutLoading())
Axel Chalon's avatar
Axel Chalon committed
@inject('createAccountStore', 'parityStore')
@observer
class AccountsList extends Component {
  handleClick = ({
    currentTarget: {
      dataset: { address }
    }
  }) => {
Axel Chalon's avatar
Axel Chalon committed
    const { history } = this.props;
Axel Chalon's avatar
Axel Chalon committed
    history.push(`/tokens/${address}`);
  };

  handleCreateAccount = () => {
Amaury Martiny's avatar
Amaury Martiny committed
    this.props.createAccountStore.setIsImport(false);
Axel Chalon's avatar
Axel Chalon committed
    this.props.history.push('/accounts/new');
Axel Chalon's avatar
Axel Chalon committed
  render () {
    const { accountsInfo } = this.props;

    const accountsList = Object.keys(accountsInfo);

    return (
      <div className='accounts-list'>
        <Header
          title={<h1>Accounts</h1>}
          right={
Axel Chalon's avatar
Axel Chalon committed
            <a className='icon -new' onClick={this.handleCreateAccount}>
              New account
            </a>
Axel Chalon's avatar
Axel Chalon committed
        <div className='window_content'>
          <div className='box -scroller'>
            <ul className='list'>
              {accountsList.length ? (
                <ul>
                  {accountsList.map(address => (
                    <li
                      key={address}
                      data-address={address} // Using data- to avoid creating a new item Component
                      onClick={this.handleClick}
                    >
                      <AccountCard
                        address={address}
                        className='-clickable'
                        name={
                          accountsInfo &&
                          accountsInfo[address] &&
                          (accountsInfo[address].name
                            ? accountsInfo[address].name
                            : '(No name)')
                        }
                        shortAddress
                      />
                    </li>
                  ))}
                </ul>
                <p className='create-hint'>
                  Nothing here yet!
                  <br />
                  <br />
                  Click the + icon to add a new account.
          </div>
        </div>

Axel Chalon's avatar
Axel Chalon committed
        <nav className='footer-nav'>
          <div className='footer-nav_status'>
            <Health />
          </div>
        </nav>
      </div>
    );
  }
}

export default AccountsList;