visual-identity/app/components/voting-dapp/proposal.js

69 lines
1.8 KiB
JavaScript
Raw Normal View History

import web3 from "Embark/web3"
import React from 'react';
2018-05-22 15:11:53 +00:00
import $ from 'jquery';
import { Button, Alert } from 'react-bootstrap';
2018-05-29 15:00:21 +00:00
import EmbarkJS from 'Embark/EmbarkJS';
import Voting from './voting';
2018-05-22 15:11:53 +00:00
class Proposal extends React.Component {
2018-05-22 15:11:53 +00:00
constructor(props) {
super(props);
this.state = {
2018-05-29 15:00:21 +00:00
url: null,
title: null,
description: null,
error: null
2018-05-22 15:11:53 +00:00
};
}
componentDidUpdate(prevProps, prevState, snapshot){
if(prevProps.data.description !== this.props.data.description)
this.getProposalData();
}
2018-05-22 15:11:53 +00:00
componentDidMount(){
2018-05-29 15:00:21 +00:00
__embarkContext.execWhenReady(() => {
this.getProposalData();
2018-05-29 15:00:21 +00:00
});
2018-05-22 15:11:53 +00:00
}
getProposalData(){
let hash = web3.utils.toAscii(this.props.data.description);
EmbarkJS.Storage.get(hash)
.then((content) => {
let jsonObj = JSON.parse(content);
this.setState({
url: jsonObj.url,
title: jsonObj.title,
description: jsonObj.description
})
})
.catch((err) => {
if(err){
console.log("Storage get Error => " + err.message);
}
});
}
2018-05-22 15:11:53 +00:00
render(){
return (<div>
{
this.state.error !== null ?
<Alert bsStyle="warning">
{ this.state.error }
</Alert>
: ''
}
2018-05-29 15:00:21 +00:00
<h3>{ this.state.title }</h3>
<p>{ this.state.description }</p>
2018-05-22 15:11:53 +00:00
<a href={ this.state.url } target="_blank">{ this.state.url }</a>
<Voting proposalId={this.props.data.id} />
2018-05-22 15:11:53 +00:00
</div>);
}
}
export default Proposal;