add voting context + refresh polls after add

This commit is contained in:
Barry Gitarts 2018-06-28 12:14:15 -04:00
parent 037c976826
commit 51baddb70e
4 changed files with 31 additions and 18 deletions

View File

@ -6,26 +6,30 @@ import AddPoll from './simple-voting/AddPoll';
import PollsList from './simple-voting/PollsList';
import StatusLogo from '../ui/components/StatusLogo';
import Collapse from '@material-ui/core/Collapse';
import { VotingContext } from '../context';
class Voting extends PureComponent {
state = { addPoll: false };
render(){
const { toggleAdmin, rawPolls } = this.props;
const { addPoll } = this.state;
const togglePoll = () => { this.setState({ addPoll: !addPoll })};
return (
<Fragment>
<CssBaseline />
<AppBar toggleAdmin={toggleAdmin} togglePoll={togglePoll} />
<div style={{ margin: '30px', textAlign: 'center' }}>
<img src="images/logo.png" width="200" />
</div>
<Collapse in={addPoll}>
<AddPoll togglePoll={togglePoll} />
</Collapse>
{rawPolls && <PollsList rawPolls={rawPolls} />}
</Fragment>
<VotingContext.Consumer>
{({ getPolls, rawPolls, toggleAdmin }) =>
<Fragment>
<CssBaseline />
<AppBar toggleAdmin={toggleAdmin} togglePoll={togglePoll} />
<div style={{ margin: '30px', textAlign: 'center' }}>
<img src="images/logo.png" width="200" />
</div>
<Collapse in={addPoll}>
<AddPoll togglePoll={togglePoll} getPolls={getPolls} />
</Collapse>
{rawPolls && <PollsList rawPolls={rawPolls} />}
</Fragment>
}
</VotingContext.Consumer>
)
}
}

View File

@ -106,6 +106,7 @@ const AddPoll = withFormik({
console.log('sucess:', res);
setSubmitting(false);
props.togglePoll();
props.getPolls();
})
.catch(res => {
console.log('fail:', res);

3
app/context.js Normal file
View File

@ -0,0 +1,3 @@
import React from 'react';
export const VotingContext = React.createContext(null);

View File

@ -5,6 +5,7 @@ import PollManager from 'Embark/contracts/PollManager';
import AdminView from './components/AdminView';
import Voting from './components/Voting';
import SNT from 'Embark/contracts/SNT';
import { VotingContext } from './context';
window['SNT'] = SNT;
import './dapp.css';
@ -36,7 +37,7 @@ class App extends React.Component {
this.setState({account: _account});
}
async _getPolls(){
_getPolls = async () => {
const { nPolls, poll } = PollManager.methods;
const polls = await nPolls.call();
const total = await polls.call();
@ -54,13 +55,17 @@ class App extends React.Component {
render(){
const { admin, rawPolls } = this.state;
const { _getPolls } = this;
const toggleAdmin = () => this.setState({ admin: true });
const votingContext = { getPolls: _getPolls, rawPolls, toggleAdmin };
return (
<Fragment>
{admin ?
<AdminView setAccount={this.setAccount} /> :
<Voting toggleAdmin={toggleAdmin} rawPolls={rawPolls} />}
</Fragment>
<VotingContext.Provider value={votingContext}>
<Fragment>
{admin ?
<AdminView setAccount={this.setAccount} /> :
<Voting />}
</Fragment>
</VotingContext.Provider>
);
}
}