Merge pull request #3618 from ethcore/jg-list-accounts

Use accountsInfo instead of eth_accounts for first check
This commit is contained in:
Gav Wood 2016-11-25 18:46:07 +01:00 committed by GitHub
commit a51066bdca
2 changed files with 57 additions and 33 deletions

View File

@ -17,6 +17,7 @@
import React, { Component, PropTypes } from 'react'; import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { bindActionCreators } from 'redux'; import { bindActionCreators } from 'redux';
import { observer } from 'mobx-react';
import Connection from '../Connection'; import Connection from '../Connection';
import ParityBar from '../ParityBar'; import ParityBar from '../ParityBar';
@ -26,13 +27,14 @@ import Container from './Container';
import DappContainer from './DappContainer'; import DappContainer from './DappContainer';
import FrameError from './FrameError'; import FrameError from './FrameError';
import Status from './Status'; import Status from './Status';
import Store from './store';
import TabBar from './TabBar'; import TabBar from './TabBar';
import styles from './application.css'; import styles from './application.css';
const inFrame = window.parent !== window && window.parent.frames.length !== 0; const inFrame = window.parent !== window && window.parent.frames.length !== 0;
const showFirstRun = window.localStorage.getItem('showFirstRun') === '1';
@observer
class Application extends Component { class Application extends Component {
static contextTypes = { static contextTypes = {
api: PropTypes.object.isRequired, api: PropTypes.object.isRequired,
@ -47,13 +49,7 @@ class Application extends Component {
blockNumber: PropTypes.object blockNumber: PropTypes.object
} }
state = { store = new Store(this.context.api);
showFirstRun: false
}
componentWillMount () {
this.checkAccounts();
}
render () { render () {
const [root] = (window.location.hash || '').replace('#/', '').split('/'); const [root] = (window.location.hash || '').replace('#/', '').split('/');
@ -76,12 +72,11 @@ class Application extends Component {
renderApp () { renderApp () {
const { children, pending, netChain, isTest, blockNumber } = this.props; const { children, pending, netChain, isTest, blockNumber } = this.props;
const { showFirstRun } = this.state;
return ( return (
<Container <Container
showFirstRun={ showFirstRun } showFirstRun={ this.store.firstrunVisible }
onCloseFirstRun={ this.onCloseFirstRun }> onCloseFirstRun={ this.store.closeFirstrun }>
<TabBar <TabBar
netChain={ netChain } netChain={ netChain }
isTest={ isTest } isTest={ isTest }
@ -102,28 +97,6 @@ class Application extends Component {
</DappContainer> </DappContainer>
); );
} }
checkAccounts () {
const { api } = this.context;
api.eth
.accounts()
.then((accounts) => {
this.setState({
showFirstRun: showFirstRun || accounts.length === 0
});
})
.catch((error) => {
console.error('checkAccounts', error);
});
}
onCloseFirstRun = () => {
window.localStorage.setItem('showFirstRun', '0');
this.setState({
showFirstRun: false
});
}
} }
function mapStateToProps (state) { function mapStateToProps (state) {

View File

@ -0,0 +1,51 @@
// Copyright 2015, 2016 Ethcore (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 { action, observable } from 'mobx';
const showFirstRun = window.localStorage.getItem('showFirstRun') !== '0';
export default class Store {
@observable firstrunVisible = showFirstRun;
constructor (api) {
this._api = api;
this._checkAccounts();
}
@action closeFirstrun = () => {
this.toggleFirstrun(false);
}
@action toggleFirstrun = (visible = false) => {
this.firstrunVisible = visible;
window.localStorage.setItem('showFirstRun', visible ? '1' : '0');
}
_checkAccounts () {
this._api.parity
.accountsInfo()
.then((info) => {
const accounts = Object.keys(info).filter((address) => info[address].uuid);
this.toggleFirstrun(this.firstrunVisible || !accounts || !accounts.length);
})
.catch((error) => {
console.error('checkAccounts', error);
});
}
}