// 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 .
import omitBy from 'lodash.omitby';
import { observer } from 'mobx-react';
import React, { Component } from 'react';
import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import DappCard from '@parity/ui/DappCard';
import Checkbox from '@parity/ui/Form/Checkbox';
import Page from '@parity/ui/Page';
import SectionList from '@parity/ui/SectionList';
import DappsStore from '@parity/shared/mobx/dappsStore';
import styles from './dapps.css';
@observer
class Dapps extends Component {
static contextTypes = {
api: PropTypes.object.isRequired
};
static propTypes = {
accounts: PropTypes.object.isRequired,
availability: PropTypes.string.isRequired
};
store = DappsStore.get(this.context.api);
componentWillMount () {
this.store.loadAllApps();
}
render () {
let externalOverlay = null;
if (this.store.externalOverlayVisible) {
externalOverlay = (
}
checked={ false }
onClick={ this.onClickAcceptExternal }
/>
);
}
return (
}
>
{ this.renderList(this.store.visibleViews) }
{ this.renderList(this.store.visibleLocal) }
{ this.renderList(this.store.visibleBuiltin) }
{ this.renderList(this.store.visibleNetwork, externalOverlay) }
);
}
renderList (items, overlay) {
return (
);
}
renderApp = (app) => {
if (app.onlyPersonal && this.props.availability !== 'personal') {
return null;
}
return (
);
}
onClickAcceptExternal = () => {
this.store.closeExternalOverlay();
}
openPermissionsModal = () => {
const { accounts } = this.props;
this.permissionStore.openModal(accounts);
}
}
function mapStateToProps (state) {
const { accounts } = state.personal;
const { availability = 'unknown' } = state.nodeStatus.nodeKind || {};
/**
* Do not show the Wallet Accounts in the Dapps
* Permissions Modal. This will come in v1.6, but
* for now it would break dApps using Web3...
*/
const _accounts = omitBy(accounts, (account) => account.wallet);
return {
accounts: _accounts,
availability
};
}
export default connect(
mapStateToProps,
null
)(Dapps);