embark/templates/demo/app/components/storage.js

269 lines
8.4 KiB
JavaScript
Raw Normal View History

2018-04-24 20:21:33 +00:00
import EmbarkJS from 'Embark/EmbarkJS';
import React from 'react';
2018-07-30 11:49:03 +00:00
import {Alert, Form, FormGroup, FormControl, HelpBlock, Button} from 'react-bootstrap';
2018-04-24 20:21:33 +00:00
class Storage extends React.Component {
2018-07-30 11:49:03 +00:00
constructor(props) {
super(props);
this.state = {
textToSave: 'hello world!',
generatedHash: '',
loadText: '',
storedText: '',
fileToUpload: null,
fileHash: '',
imageToDownload: '',
url: '',
logs: [],
storageError: '',
2018-07-30 16:06:20 +00:00
valueRegister: '',
valueResolver: '',
2018-07-30 11:49:03 +00:00
};
}
handleChange(e, name) {
this.state[name] = e.target.value;
this.setState(this.state);
}
2018-08-15 17:12:52 +00:00
checkEnter(e, func) {
if (e.key !== 'Enter') {
return;
}
e.preventDefault();
func.apply(this, [e]);
}
2018-07-30 11:49:03 +00:00
handleFileUpload(e) {
this.setState({fileToUpload: [e.target]});
}
addToLog(txt) {
this.state.logs.push(txt);
this.setState({logs: this.state.logs});
}
setText(e) {
e.preventDefault();
EmbarkJS.Storage.saveText(this.state.textToSave)
.then((hash) => {
this.setState({
generatedHash: hash,
loadText: hash,
2018-04-27 13:04:34 +00:00
storageError: ''
2018-07-30 11:49:03 +00:00
});
this.addToLog("EmbarkJS.Storage.saveText('" + this.state.textToSave + "').then(function(hash) { })");
})
.catch((err) => {
if (err) {
this.setState({storageError: err.message});
console.log("Storage saveText Error => " + err.message);
}
});
}
loadHash(e) {
e.preventDefault();
EmbarkJS.Storage.get(this.state.loadText)
.then((content) => {
this.setState({storedText: content, storageError: ''});
this.addToLog("EmbarkJS.Storage.get('" + this.state.loadText + "').then(function(content) { })");
})
.catch((err) => {
if (err) {
this.setState({storageError: err.message});
console.log("Storage get Error => " + err.message);
}
});
}
uploadFile(e) {
e.preventDefault();
EmbarkJS.Storage.uploadFile(this.state.fileToUpload)
.then((hash) => {
this.setState({
fileHash: hash,
imageToDownload: hash,
storageError: ''
});
this.addToLog("EmbarkJS.Storage.uploadFile(this.state.fileToUpload).then(function(hash) { })");
})
.catch((err) => {
if (err) {
this.setState({storageError: err.message});
console.log("Storage uploadFile Error => " + err.message);
}
});
}
loadFile(e) {
let _url = EmbarkJS.Storage.getUrl(this.state.imageToDownload);
this.setState({url: _url});
this.addToLog("EmbarkJS.Storage.getUrl('" + this.state.imageToDownload + "')");
}
ipnsRegister(e) {
e.preventDefault();
2018-07-30 16:06:20 +00:00
this.setState({ registering: true, responseRegister: false });
2018-08-22 09:11:57 +00:00
this.addToLog("EmbarkJS.Storage.register(this.state.ipfsHash).then(function(hash) { })");
EmbarkJS.Storage.register(this.state.valueRegister, (err, name) => {
2018-07-30 16:06:20 +00:00
let responseRegister;
let isRegisterError = false;
2018-07-30 11:49:03 +00:00
if (err) {
2018-07-30 16:06:20 +00:00
isRegisterError = true;
2018-07-30 16:22:44 +00:00
responseRegister = "Name Register Error: " + (err.message || err)
2018-07-30 16:06:20 +00:00
} else {
responseRegister = name;
2018-07-30 11:49:03 +00:00
}
this.setState({
2018-07-30 16:06:20 +00:00
registering: false,
2018-07-30 16:22:44 +00:00
responseRegister,
isRegisterError
2018-07-30 11:49:03 +00:00
});
});
}
ipnsResolve(e) {
e.preventDefault();
2018-07-30 16:06:20 +00:00
this.setState({ resolving: true, responseResolver: false });
2018-08-22 09:11:57 +00:00
this.addToLog("EmbarkJS.Storage.resolve(this.state.ipnsName, function(err, path) { })");
EmbarkJS.Storage.resolve(this.state.valueResolver, (err, path) => {
2018-07-30 16:06:20 +00:00
let responseResolver;
let isResolverError = false;
2018-07-30 11:49:03 +00:00
if (err) {
2018-07-30 16:06:20 +00:00
isResolverError = true;
2018-07-30 16:22:44 +00:00
responseResolver = "Name Resolve Error: " + (err.message || err)
2018-07-30 16:06:20 +00:00
} else {
responseResolver = path;
2018-07-30 11:49:03 +00:00
}
this.setState({
2018-07-30 16:06:20 +00:00
resolving: false,
2018-07-30 16:22:44 +00:00
responseResolver,
isResolverError
2018-07-30 11:49:03 +00:00
});
});
}
render() {
return <React.Fragment>
{
!this.props.enabled ?
<React.Fragment>
<Alert bsStyle="warning">The node you are using does not support IPFS. Please ensure <a
href="https://github.com/ipfs/js-ipfs-api#cors" target="_blank">CORS</a> is setup for the IPFS
node.</Alert>
</React.Fragment> : ''
}
{
this.state.storageError !== '' ?
<Alert bsStyle="danger">{this.state.storageError}</Alert>
: ''
}
<h3>Save text to storage</h3>
2018-08-15 17:12:52 +00:00
<Form inline onKeyDown={(e) => this.checkEnter(e, this.setText)}>
2018-07-30 11:49:03 +00:00
<FormGroup>
<FormControl
type="text"
defaultValue={this.state.textToSave}
onChange={e => this.handleChange(e, 'textToSave')}/>
<Button bsStyle="primary" onClick={(e) => this.setText(e)}>Save Text</Button>
<HelpBlock>generated Hash: <span className="textHash">{this.state.generatedHash}</span></HelpBlock>
</FormGroup>
</Form>
<h3>Load text from storage given an hash</h3>
2018-08-15 17:12:52 +00:00
<Form inline onKeyDown={(e) => this.checkEnter(e, this.loadHash)}>
2018-07-30 11:49:03 +00:00
<FormGroup>
<FormControl
type="text"
value={this.state.loadText}
onChange={e => this.handleChange(e, 'loadText')}/>
<Button bsStyle="primary" onClick={(e) => this.loadHash(e)}>Load</Button>
<HelpBlock>result: <span className="textHash">{this.state.storedText}</span></HelpBlock>
</FormGroup>
</Form>
<h3>Upload file to storage</h3>
<Form inline>
<FormGroup>
<FormControl
type="file"
onChange={(e) => this.handleFileUpload(e)}/>
<Button bsStyle="primary" onClick={(e) => this.uploadFile(e)}>Upload</Button>
<HelpBlock>generated hash: <span className="fileHash">{this.state.fileHash}</span></HelpBlock>
</FormGroup>
</Form>
<h3>Get file or image from storage</h3>
2018-08-15 17:12:52 +00:00
<Form inline onKeyDown={(e) => this.checkEnter(e, this.loadFile)}>
2018-07-30 11:49:03 +00:00
<FormGroup>
<FormControl
type="text"
value={this.state.imageToDownload}
onChange={e => this.handleChange(e, 'imageToDownload')}/>
<Button bsStyle="primary" onClick={(e) => this.loadFile(e)}>Download</Button>
<HelpBlock>file available at: <span><a href={this.state.url}
target="_blank">{this.state.url}</a></span></HelpBlock>
<HelpBlock><img src={this.state.url}/></HelpBlock>
</FormGroup>
</Form>
2018-08-23 08:59:02 +00:00
<Alert bsStyle="warning">The 2 functions below are only available with IPFS</Alert>
2018-07-30 11:49:03 +00:00
<h3>Register to IPNS</h3>
2018-08-15 17:12:52 +00:00
<Form inline onKeyDown={(e) => this.checkEnter(e, this.ipnsRegister)}>
2018-07-30 11:49:03 +00:00
<FormGroup>
<FormControl
type="text"
2018-07-30 16:06:20 +00:00
value={this.state.valueRegister}
onChange={e => this.handleChange(e, 'valueRegister')}/>
2018-07-30 11:49:03 +00:00
<Button bsStyle="primary" onClick={(e) => this.ipnsRegister(e)}>
2018-07-30 16:06:20 +00:00
{this.state.registering ? 'Registering...' : 'Register' }
2018-07-30 11:49:03 +00:00
</Button>
<HelpBlock>It will take around 1 minute</HelpBlock>
2018-07-30 16:06:20 +00:00
{this.state.responseRegister &&
<Alert className="alert-result" bsStyle={this.state.isRegisterError ? 'danger' : 'success'}>
<span className="value">{this.state.responseRegister}</span>
</Alert>}
2018-07-30 11:49:03 +00:00
</FormGroup>
</Form>
<h3>Resolve name</h3>
2018-08-15 17:12:52 +00:00
<Form inline onKeyDown={(e) => this.checkEnter(e, this.ipnsResolve)}>
2018-07-30 11:49:03 +00:00
<FormGroup>
<FormControl
type="text"
2018-07-30 16:06:20 +00:00
value={this.state.valueResolver}
onChange={e => this.handleChange(e, 'valueResolver')}/>
2018-07-30 11:49:03 +00:00
<Button bsStyle="primary" onClick={(e) => this.ipnsResolve(e)}>
2018-07-30 16:06:20 +00:00
{this.state.resolving ? 'Resolving...' : 'Resolve' }
2018-07-30 11:49:03 +00:00
</Button>
<HelpBlock>It will take around 1 minute</HelpBlock>
2018-07-30 16:06:20 +00:00
{this.state.responseResolver &&
<Alert className="alert-result" bsStyle={this.state.isResolverError ? 'danger' : 'success'}>
<span className="value">{this.state.responseResolver}</span>
</Alert>}
2018-07-30 11:49:03 +00:00
</FormGroup>
</Form>
<p>Javascript calls being made: </p>
<div className="logs">
<p>EmbarkJS.Storage.setProvider('ipfs',{'{'}server: 'localhost', port: '5001'{'}'})</p>
{
this.state.logs.map((item, i) => <p key={i}>{item}</p>)
}
</div>
</React.Fragment>;
}
2018-04-24 20:21:33 +00:00
}
2018-07-30 11:49:03 +00:00
export default Storage;