embark/dapps/templates/demo/app/dapp.js

94 lines
2.9 KiB
JavaScript
Raw Normal View History

import React from 'react';
import ReactDOM from 'react-dom';
2018-07-11 17:11:55 +00:00
import {Tabs, Tab} from 'react-bootstrap';
2018-01-03 17:42:48 +00:00
import EmbarkJS from 'Embark/EmbarkJS';
import Blockchain from './components/blockchain';
import Whisper from './components/whisper';
2018-04-24 20:21:33 +00:00
import Storage from './components/storage';
2018-07-11 17:11:55 +00:00
import ENS from './components/ens';
2018-01-03 17:42:48 +00:00
2018-01-12 21:33:16 +00:00
import './dapp.css';
class App extends React.Component {
constructor(props) {
super(props);
2015-05-24 13:07:19 +00:00
2018-07-30 11:49:03 +00:00
this.handleSelect = this.handleSelect.bind(this);
this.state = {
2018-08-24 14:05:48 +00:00
error: null,
2018-07-30 11:49:03 +00:00
activeKey: 1,
2018-04-24 20:21:33 +00:00
whisperEnabled: false,
2018-09-11 08:11:22 +00:00
storageEnabled: false,
2018-10-23 15:39:14 +00:00
blockchainEnabled: false
2018-07-11 17:11:55 +00:00
};
}
2017-10-25 10:19:24 +00:00
2018-07-11 17:11:55 +00:00
componentDidMount() {
EmbarkJS.onReady((err) => {
2018-09-11 08:11:22 +00:00
this.setState({blockchainEnabled: true});
if (err) {
// If err is not null then it means something went wrong connecting to ethereum
// you can use this to ask the user to enable metamask for e.g
2018-09-11 21:10:36 +00:00
return this.setState({error: err.message || err});
}
EmbarkJS.Messages.Providers.whisper.getWhisperVersion((err, _version) => {
if (err) {
return console.log(err);
2018-04-26 00:11:15 +00:00
}
this.setState({whisperEnabled: true});
});
2018-08-22 09:11:57 +00:00
EmbarkJS.Storage.isAvailable().then((result) => {
this.setState({storageEnabled: result});
}).catch(() => {
this.setState({storageEnabled: false});
});
2017-01-26 11:29:17 +00:00
});
}
2017-01-26 11:29:17 +00:00
2018-07-11 17:11:55 +00:00
_renderStatus(title, available) {
let className = available ? 'pull-right status-online' : 'pull-right status-offline';
return <React.Fragment>
2018-07-11 17:11:55 +00:00
{title}
<span className={className}></span>
</React.Fragment>;
2017-10-25 10:19:24 +00:00
}
2017-01-26 11:29:17 +00:00
2018-07-30 11:49:03 +00:00
handleSelect(key) {
this.setState({ activeKey: key });
}
2018-07-11 17:11:55 +00:00
render() {
2018-08-29 09:22:43 +00:00
const ensEnabled = EmbarkJS.Names.currentNameSystems && EmbarkJS.Names.isAvailable();
if (this.state.error) {
return (<div>
<div>Something went wrong connecting to ethereum. Please make sure you have a node running or are using metamask to connect to the ethereum network:</div>
<div>{this.state.error}</div>
</div>);
2018-08-23 20:23:00 +00:00
}
return (<div>
<h3>Embark - Usage Example</h3>
2018-07-30 11:49:03 +00:00
<Tabs onSelect={this.handleSelect} activeKey={this.state.activeKey} id="uncontrolled-tab-example">
2018-09-11 08:11:22 +00:00
<Tab eventKey={1} title={this._renderStatus('Blockchain', this.state.blockchainEnabled)}>
2018-07-11 17:11:55 +00:00
<Blockchain/>
</Tab>
2018-04-24 20:21:33 +00:00
<Tab eventKey={2} title={this._renderStatus('Decentralized Storage', this.state.storageEnabled)}>
2018-07-11 17:11:55 +00:00
<Storage enabled={this.state.storageEnabled}/>
</Tab>
2018-07-11 17:11:55 +00:00
<Tab eventKey={3} title={this._renderStatus('P2P communication (Whisper)', this.state.whisperEnabled)}>
<Whisper enabled={this.state.whisperEnabled}/>
</Tab>
2018-08-29 09:22:43 +00:00
<Tab eventKey={4} title={this._renderStatus('Naming (ENS)', ensEnabled)}>
<ENS enabled={ensEnabled}/>
</Tab>
</Tabs>
</div>);
}
}
2017-01-26 11:29:17 +00:00
ReactDOM.render(<App></App>, document.getElementById('app'));