OSDN Git Service

da45f08ad4fe922a94347478a7d68dab13f6a663
[bytom/Bytom-Dapp-Demo.git] / src / components / App.js
1 import React, { Component } from "react";
2 import '../styles/App.css';
3 import { Switch, Route, withRouter } from 'react-router-dom';
4 import  Profit  from './layout/profit'
5 import Saving from './layout/save'
6 import Footer from './layout/footer'
7 import Header from './layout/header'
8 import Account from './layout/account'
9 import Constants from './layout/constants'
10 import action from './action'
11 import bytomWrap from './layout/bytomWrap'
12 import {connect} from "react-redux";
13
14 import GetContractArgs from "./constants";
15 import Bytom from 'bytom-js-sdk'
16
17 class App extends Component {
18   componentWillMount(){
19     const { bytom, setBytom } = this.props;
20     if(!bytom){
21       document.addEventListener('chromeBytomLoaded', bytomExtension => {
22         const bytom = window.bytom;
23         this.bytomLoaded(bytom);
24         setBytom(bytom);
25       });
26     }else {
27       this.bytomLoaded(bytom);
28     }
29   }
30
31   async bytomLoaded (bytom){
32     let bytomPollInterval = 3 * 1000;
33     let networks = {
34       solonet: 'http://app.bycoin.io:3000/',
35       testnet: 'http://app.bycoin.io:3020/',
36       mainnet: 'https://api.bycoin.im:8000/'
37     };
38
39     try {
40       const BYTOM_ACCOUNT = await bytom.enable()
41
42       const bytomAPI = new Bytom(networks, '')
43       bytomAPI.setNetType(bytom.net)
44
45       global.bytomAPI = bytomAPI
46
47       this.props.updateConnection(true)
48
49       // Check to see if the user has signed in/out of their
50       // bytom wallet or switched accounts
51       let accountInterval = setInterval(function () {
52         if (BYTOM_ACCOUNT.accountId !== bytom.default_account.accountId) {
53           location.reload(true);
54         }
55       }, bytomPollInterval);
56     } catch (err) {
57       console.log(err);
58     }
59   }
60
61   render() {
62     return  (
63       <div>
64         <Header />
65         <Constants/>
66         <section className="portfolio" id="portfolio">
67           <div className="container">
68             <Main />
69           </div>
70         </section>
71         <Footer />
72       </div>
73     )
74   }
75 }
76
77 const Main = () => (
78   <Switch>
79     <Route exact path='/' component={bytomWrap(Saving)}/>
80     <Route exact path='/profit' component={bytomWrap(Profit)}/>
81     <Route exact path='/account' component={bytomWrap(Account)}/>
82   </Switch>
83 );
84
85
86 const mapStateToProps = state => ({
87   bytom: state.bytom,
88 })
89
90 const mapDispatchToProps = dispatch => ({
91   setBytom: (bytom) => dispatch(action.setBytom(bytom)),
92   updateConnection: (bytomConnection) => dispatch(action.updateConnection(bytomConnection)),
93 })
94
95 export default withRouter(connect(mapStateToProps, mapDispatchToProps)(App))