openethereum/js/src/modals/DappPermissions/dappPermissions.js
Jaco Greeff a6ed3dc5dc Add SelectionList component to DRY up (#4639)
* Added SelectionList component for selections

* Use SelectionList in DappPermisions

* AddDapps uses SelectionList

* Fix AccountCard to consistent height

* Convert Signer defaults to SelectionList

* Subtle selection border

* Convert VaultAccounts to SelectionList

* Add tests for SectionList component

* Apply scroll fixes from lates commit in #4621

* Remove unneeded logs

* Remove extra div, fixing ParityBar overflow
2017-02-24 14:37:56 +01:00

108 lines
2.8 KiB
JavaScript

// Copyright 2015-2017 Parity Technologies (UK) Ltd.
// This file is part of Parity.
// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
import { observer } from 'mobx-react';
import React, { Component, PropTypes } from 'react';
import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { AccountCard, Portal, SelectionList } from '~/ui';
import { CheckIcon, StarIcon } from '~/ui/Icons';
import styles from './dappPermissions.css';
@observer
class DappPermissions extends Component {
static propTypes = {
balances: PropTypes.object,
permissionStore: PropTypes.object.isRequired
};
render () {
const { permissionStore } = this.props;
if (!permissionStore.modalOpen) {
return null;
}
return (
<Portal
buttons={
<div className={ styles.legend }>
<FormattedMessage
id='dapps.permissions.description'
defaultMessage='{activeIcon} account is available to application, {defaultIcon} account is the default account'
values={ {
activeIcon: <CheckIcon />,
defaultIcon: <StarIcon />
} }
/>
</div>
}
onClose={ permissionStore.closeModal }
open
title={
<FormattedMessage
id='dapps.permissions.label'
defaultMessage='visible dapp accounts'
/>
}
>
<SelectionList
items={ permissionStore.accounts }
noStretch
onDefaultClick={ this.onMakeDefault }
onSelectClick={ this.onSelect }
renderItem={ this.renderAccount }
/>
</Portal>
);
}
onMakeDefault = (account) => {
this.props.permissionStore.setDefaultAccount(account.address);
}
onSelect = (account) => {
this.props.permissionStore.selectAccount(account.address);
}
renderAccount = (account) => {
const { balances } = this.props;
const balance = balances[account.address];
return (
<AccountCard
account={ account }
balance={ balance }
/>
);
}
}
function mapStateToProps (state) {
const { balances } = state.balances;
return {
balances
};
}
export default connect(
mapStateToProps,
null
)(DappPermissions);