Newer
Older
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
// This file is part of Parity.
//
import { AccountCard, Clickable, Header } from 'fether-ui';
import { chainId$, withoutLoading } from '@parity/light.js';
import light from '@parity/light.js-react';
Luke Schoen
committed
import RequireHealthOverlay from '../../RequireHealthOverlay';
import Feedback from './Feedback';
import withAccountsInfo from '../../utils/withAccountsInfo';
@light({
chainId: () => chainId$().pipe(withoutLoading())
})
@observer
class AccountsList extends Component {
handleClick = ({
currentTarget: {
dataset: { address }
}
}) => {
const { accountsInfo, chainId } = this.props;
const accountsList = Object.keys(accountsInfo).filter(
key =>
!accountsInfo[key].chainId ||
accountsInfo[key].chainId === parseInt(chainId, 10)
Luke Schoen
committed
const accountsListLength = accountsList && accountsList.length;
<RequireHealthOverlay require='node'>
Luke Schoen
committed
<div className='accounts-list'>
<Header
right={
<Clickable
className='icon -new'
onClick={this.handleCreateAccount}
/>
}
title={<h1>Accounts</h1>}
/>
Luke Schoen
committed
<div className='window_content'>
<div className='box -scroller'>
{accountsListLength ? (
<ul className='list'>
{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'
type={accountsInfo[address].type}
name={accountsInfo[address].name || '(no name)'}
screen='accounts'
shortAddress
/>
</li>
))}
</ul>
) : (
<p className='create-hint'>
Nothing here yet!
<br />
<br />
Click the + icon to add a new account.
</p>
)}
</div>
<nav className='footer-nav'>
<div className='footer-nav_status'>
<Health />
</div>
<div className='footer-feedback'>
<Feedback accountsListLength={accountsListLength} />
</div>
</nav>
Luke Schoen
committed
</div>
</RequireHealthOverlay>
);
}
}
export default AccountsList;