OSDN Git Service

83fff5ee143fbe476c6377e90e130c8bbef4c65e
[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   componentDidMount(){
19     const { bytom, setBytom } = this.props;
20     if(!bytom){
21       document.addEventListener('chromeBytomLoaded', bytomExtension => {
22         const bytom = window.bytom;
23         setBytom(bytom);
24         this.bytomLoaded(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       this.props.updateConnection(true)
42
43       const bytomAPI = new Bytom(networks, '')
44       bytomAPI.setNetType(bytom.net)
45
46       global.bytomAPI = bytomAPI
47
48       // Check to see if the user has signed in/out of their
49       // bytom wallet or switched accounts
50       let accountInterval = setInterval(function () {
51         if (BYTOM_ACCOUNT.accountId !== bytom.default_account.accountId) {
52           location.reload(true);
53         }
54       }, bytomPollInterval);
55     } catch (err) {
56       console.log(err);
57     }
58   }
59
60   render() {
61     return  (
62       <div>
63         <Header />
64         <Constants/>
65         <section className="portfolio" id="portfolio">
66           <div className="container">
67             <Main />
68           </div>
69         </section>
70         <Footer />
71       </div>
72     )
73   }
74 }
75
76 const Main = () => (
77   <Switch>
78     <Route exact path='/' component={bytomWrap(Saving)}/>
79     <Route exact path='/profit' component={bytomWrap(Profit)}/>
80     <Route exact path='/account' component={bytomWrap(Account)}/>
81   </Switch>
82 );
83
84
85 const mapStateToProps = state => ({
86   bytom: state.bytom,
87 })
88
89 const mapDispatchToProps = dispatch => ({
90   setBytom: (bytom) => dispatch(action.setBytom(bytom)),
91   updateConnection: (bytomConnection) => dispatch(action.updateConnection(bytomConnection)),
92 })
93
94 export default withRouter(connect(mapStateToProps, mapDispatchToProps)(App))