import React, { Fragment, Component } from 'react'; import Card from '@material-ui/core/Card'; import CardContent from '@material-ui/core/CardContent'; import CardActions from '@material-ui/core/CardActions'; import Button from '@material-ui/core/Button'; import Typography from '@material-ui/core/Typography'; import Slider from '@material-ui/lab/Slider'; import Tooltip from '@material-ui/core/Tooltip'; import PollManager from 'Embark/contracts/PollManager'; import MiniMeTokenInterface from 'Embark/contracts/MiniMeTokenInterface'; class Poll extends Component { constructor(props){ super(props); this.state = { value: 0, balance: 0, isSubmitting: false, ...props }; } handleChange = (event, value) => { this.setState({ value }); }; handleClick = (event) => { event.preventDefault(); this.setState({isSubmitting: true}); const { customVote, poll, unvote } = PollManager.methods; const { idPoll, value } = this.state; const balance4Voting = value * value; const toSend = balance4Voting === 0 ? unvote(idPoll) : customVote(idPoll, balance4Voting); toSend.estimateGas() .then(gasEstimated => { console.log("voting gas estimated: " + gasEstimated); return toSend.send({gas: gasEstimated + 100000}); }) .then(res => { console.log('sucess:', res); this.setState({isSubmitting: false}); return poll(idPoll).call(); }) .then(poll => { this.setState(poll); }) .catch(res => { console.log('fail:', res); }) .finally(() => { this.setState({isSubmitting: false}); }); } componentDidMount() { MiniMeTokenInterface.options.address = this.props._token; MiniMeTokenInterface.methods.balanceOfAt(web3.eth.defaultAccount, this.props._startBlock - 1) .call() .then(balance => { this.setState({balance}); }); PollManager.methods.getVote(this.props.idPoll, web3.eth.defaultAccount) .call() .then(vote => { this.setState({value: Math.sqrt(vote)}); }) } render(){ const { _description, _totalCensus, _voters, _qvResults, _results, _canVote, value, isSubmitting, balance, votes } = this.state; const disableVote = balance == 0 || !_canVote || isSubmitting; const maxValue = Math.floor(Math.sqrt(balance)); return ( {_description} Number of voters: {_voters} Votes: {_qvResults} SNT Allocated: {_results} ) } } const PollsList = ({ rawPolls }) => ( {rawPolls.map((poll, idx) => )} ) export default PollsList