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'; import web3 from "Embark/web3" import CircularProgress from '@material-ui/core/CircularProgress'; import { VotingContext } from '../../context'; class Poll extends Component { constructor(props){ super(props); this.state = { value: 0, balance: 0, isSubmitting: false }; } handleChange = (event, value) => { this.setState({ value }); }; handleClick = (event) => { event.preventDefault(); this.setState({isSubmitting: true}); const { customVote, poll, unvote } = PollManager.methods; const { updatePoll, idPoll } = this.props; const { value } = this.state; const { toWei } = web3.utils; const balance4Voting = toWei(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 updatePoll(idPoll); }) .catch(res => { console.log('fail:', res); }) .finally(() => { this.setState({isSubmitting: false}); }); } componentDidMount() { const { fromWei } = web3.utils; MiniMeTokenInterface.options.address = this.props._token; MiniMeTokenInterface.methods.balanceOfAt(web3.eth.defaultAccount, this.props._startBlock - 1) .call() .then(balance => { this.setState({balance: fromWei(balance)}); }); PollManager.methods.getVote(this.props.idPoll, web3.eth.defaultAccount) .call() .then(vote => { this.setState({value: parseInt(Math.sqrt(fromWei(vote)))}); }) } render(){ const { _description, _totalCensus, _voters, _qvResults, _results, _canVote, } = this.props; const { value, balance, isSubmitting } = this.state; const disableVote = balance == 0 || !_canVote || isSubmitting; const { fromWei } = web3.utils; const maxValue = Math.floor(Math.sqrt(balance)); return ( {_description} Number of voters: {_voters} Votes: {_qvResults} SNT Allocated: {fromWei(_results)} {isSubmitting ? : } ) } } const PollsList = () => ( {({ updatePoll, rawPolls }) => {rawPolls.map((poll, idx) => )} } ) export default PollsList