2018-10-16 16:20:54 -04:00
|
|
|
import React, { PureComponent } from 'react';
|
2018-06-26 12:46:06 -04:00
|
|
|
import CssBaseline from '@material-ui/core/CssBaseline';
|
|
|
|
import 'typeface-roboto';
|
|
|
|
import AppBar from './standard/AppBar';
|
2018-06-26 16:34:52 -04:00
|
|
|
import AddPoll from './simple-voting/AddPoll';
|
2018-06-28 11:03:59 -04:00
|
|
|
import Collapse from '@material-ui/core/Collapse';
|
2018-07-18 06:29:59 -04:00
|
|
|
import LinearProgress from '@material-ui/core/LinearProgress';
|
2018-06-28 12:14:15 -04:00
|
|
|
import { VotingContext } from '../context';
|
2018-10-16 16:20:54 -04:00
|
|
|
import { Route, Switch } from "react-router-dom";
|
|
|
|
|
|
|
|
import TitleScreen from './flow/TitleScreen';
|
|
|
|
import LearnAboutBallots from './flow/LearnAboutBallots';
|
|
|
|
import HowVotingWorks from './flow/HowVotingWorks';
|
|
|
|
import ConnectYourWallet from './flow/ConnectYourWallet';
|
|
|
|
import OtherWallets from './flow/OtherWallets';
|
2018-10-20 22:35:54 -04:00
|
|
|
import ExternalWallet from './flow/ExternalWallet';
|
2018-10-17 09:16:09 -04:00
|
|
|
import VotingCredits from './flow/VotingCredits';
|
|
|
|
import PollVoting from './flow/PollVoting';
|
|
|
|
import ReviewVotes from './flow/ReviewVotes';
|
2018-10-18 10:32:38 -04:00
|
|
|
import Results from './flow/Results';
|
|
|
|
|
2018-10-16 16:20:54 -04:00
|
|
|
|
2018-06-27 15:34:06 -04:00
|
|
|
class Voting extends PureComponent {
|
2018-10-17 11:02:31 -04:00
|
|
|
state = {
|
|
|
|
addPoll: false,
|
2018-10-17 15:30:11 -04:00
|
|
|
pollTokenBalances: [],
|
2018-10-18 10:32:38 -04:00
|
|
|
votes: [],
|
2018-10-21 08:23:53 -04:00
|
|
|
transaction: null,
|
|
|
|
transactionHash: ''
|
2018-10-17 11:02:31 -04:00
|
|
|
};
|
|
|
|
|
2018-10-18 08:47:35 -04:00
|
|
|
updatePollBalance = (pollId, tokenBalance, ethBalance, votes) => {
|
2018-10-17 11:02:31 -04:00
|
|
|
const {pollTokenBalances} = this.state;
|
|
|
|
pollTokenBalances[pollId] = { tokenBalance, ethBalance };
|
2018-10-18 08:47:35 -04:00
|
|
|
this.setState({pollTokenBalances, votes});
|
2018-10-17 11:02:31 -04:00
|
|
|
}
|
|
|
|
|
2018-10-17 15:30:11 -04:00
|
|
|
setVotesToReview = (votes) => {
|
|
|
|
this.setState({votes});
|
|
|
|
}
|
2018-10-21 08:23:53 -04:00
|
|
|
|
|
|
|
setTransactionHash = (transactionHash) => {
|
|
|
|
this.setState({transactionHash});
|
|
|
|
}
|
2018-06-27 15:34:06 -04:00
|
|
|
|
2018-10-18 10:32:38 -04:00
|
|
|
setTransactionPromise = (transaction) => {
|
|
|
|
this.setState({transaction});
|
|
|
|
}
|
|
|
|
|
2018-06-27 15:34:06 -04:00
|
|
|
render(){
|
2018-10-21 08:23:53 -04:00
|
|
|
const { addPoll, pollTokenBalances, votes, transaction, transactionHash } = this.state;
|
2018-06-27 15:34:06 -04:00
|
|
|
const togglePoll = () => { this.setState({ addPoll: !addPoll })};
|
2018-10-16 18:52:40 -04:00
|
|
|
|
2018-06-27 15:34:06 -04:00
|
|
|
return (
|
2018-06-28 12:14:15 -04:00
|
|
|
<VotingContext.Consumer>
|
2018-09-27 15:30:23 -04:00
|
|
|
{({ getPolls, rawPolls, loading, symbol }) =>
|
2018-06-29 07:22:07 -04:00
|
|
|
<div>
|
2018-06-28 12:14:15 -04:00
|
|
|
<CssBaseline />
|
2018-09-27 15:30:23 -04:00
|
|
|
<AppBar togglePoll={togglePoll} symbol={symbol} />
|
2018-07-18 06:29:59 -04:00
|
|
|
{loading && <LinearProgress />}
|
2018-06-28 12:14:15 -04:00
|
|
|
<Collapse in={addPoll}>
|
|
|
|
<AddPoll togglePoll={togglePoll} getPolls={getPolls} />
|
|
|
|
</Collapse>
|
2018-10-16 16:20:54 -04:00
|
|
|
<div id="votingDapp">
|
|
|
|
<Switch>
|
|
|
|
<Route exact path="/" render={() => <TitleScreen polls={rawPolls} />} />
|
2018-10-20 21:37:32 -04:00
|
|
|
<Route path="/learn/:id" render={props => <LearnAboutBallots polls={rawPolls} idPoll={props.match.params.id} />} />
|
|
|
|
<Route path="/votingHelp/:id" render={props => <HowVotingWorks idPoll={props.match.params.id} />} />
|
|
|
|
<Route path="/wallet/:id" render={props => <ConnectYourWallet polls={rawPolls} idPoll={props.match.params.id} updateBalances={this.updatePollBalance} />} />
|
|
|
|
<Route path="/otherWallets/:id" render={props => <OtherWallets idPoll={props.match.params.id} />} />
|
2018-10-20 22:35:54 -04:00
|
|
|
<Route path="/externalWallet/:id" render={props => <ExternalWallet polls={rawPolls} idPoll={props.match.params.id} updateBalances={this.updatePollBalance} />} />
|
2018-10-20 21:37:32 -04:00
|
|
|
<Route path="/votingCredits/:id" render={props => <VotingCredits polls={rawPolls} idPoll={props.match.params.id} balances={pollTokenBalances} />} />
|
|
|
|
<Route path="/voting/:id" render={props => <PollVoting polls={rawPolls} idPoll={props.match.params.id} balances={pollTokenBalances} originalVotes={votes} setVotesToReview={this.setVotesToReview} />} />
|
2018-10-21 08:23:53 -04:00
|
|
|
<Route path="/review/:id" render={props => <ReviewVotes polls={rawPolls} idPoll={props.match.params.id} votes={votes} balances={pollTokenBalances} setTransactionPromise={this.setTransactionPromise} setTransactionHash={this.setTransactionHash} />} />
|
|
|
|
<Route path="/results/:id" render={props => <Results polls={rawPolls} idPoll={props.match.params.id} transaction={transaction} transactionHash={transactionHash} />} />
|
2018-10-16 16:20:54 -04:00
|
|
|
</Switch>
|
|
|
|
</div>
|
2018-06-29 07:22:07 -04:00
|
|
|
</div>
|
2018-06-28 12:14:15 -04:00
|
|
|
}
|
|
|
|
</VotingContext.Consumer>
|
2018-06-27 15:34:06 -04:00
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-10-16 16:20:54 -04:00
|
|
|
export default Voting;
|