Skip to content

Commit 3c55d6c

Browse files
committed
chore: more general cleanup
1 parent 8592837 commit 3c55d6c

11 files changed

+185
-101
lines changed

package-lock.json

+112-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"web-vitals": "^1.1.1"
1515
},
1616
"devDependencies": {
17+
"@types/react-router-dom": "^5.3.3",
1718
"chokidar": "^3.5.2"
1819
},
1920
"scripts": {

src/app/App.js

+5-30
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import React from 'react';
12
import { Component } from 'react';
23
import Header from './Header';
34
import Footer from './Footer';
4-
// import Home from '../home/Home';
55
import SetupPage from '../pages/setup/SetupPage';
66
import BallotPage from '../pages/ballot/BallotPage';
77
import AboutPage from '../pages/about/AboutPage';
@@ -13,44 +13,19 @@ import {
1313
} from 'react-router-dom';
1414
import './App.css';
1515

16-
1716
class App extends Component {
18-
1917
render() {
2018
return (
2119
<div className="App">
2220
<Router>
2321
<Header />
2422
<main>
25-
2623
<Switch>
27-
<Route path="/" exact={true}
28-
render={routerProps => (
29-
// <Home {...routerProps}/>
30-
<Redirect to="/setup" />
31-
)}
32-
/>
33-
34-
<Route path="/setup" exact={true}
35-
render={routerProps => (
36-
<SetupPage {...routerProps} />
37-
)}
38-
/>
39-
40-
<Route path="/ballot/:id"
41-
render={routerProps => (
42-
<BallotPage {...routerProps} />
43-
)}
44-
/>
45-
46-
<Route path="/about"
47-
render={routerProps => (
48-
<AboutPage {...routerProps} />
49-
)}
50-
/>
51-
24+
<Route path="/" exact render={() => <Redirect to="/setup" />} />
25+
<Route path="/setup" exact render={() => <SetupPage />} />
26+
<Route path="/ballot/:id" render={(routerProps) => <BallotPage {...routerProps} />} />
27+
<Route path="/about" render={() => <AboutPage />} />
5228
<Redirect to="/" />
53-
5429
</Switch>
5530
</main>
5631
<Footer />

src/pages/ballot/BallotPage.js

+2-9
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,10 @@ import AdminPanel from './AdminPanel';
66
import ResultsPanel from './ResultsPanel';
77
import './BallotPage.css';
88

9-
/*
10-
TODO:
11-
- [x] login panel
12-
- [ ] admin panel
13-
- [x] voting panel
14-
- [x] result panel
15-
*/
169

1710
const BallotPage = props => {
18-
const {
19-
loading, ballot,
11+
const {
12+
loading, ballot,
2013
users, signIn, signUp, signOut, currentUser,
2114
candidates, winners, endVote,
2215
currentRanking, updateVote, handleRankingChange

src/pages/ballot/ResultsPanel.js

+28-24
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,40 @@
11
import React from 'react';
2-
import { getByProperty } from '../../utils/utils';
32
import './ResultsPanel.css';
43

54
const ResultsPanel = props => {
65
const { winners, ballot, candidates } = props;
76
// const { users } = props;
8-
7+
98
// const votes = users.filter(u => u.vote).map(u => u.vote);
109

11-
return <div className="ResultsPanel panel">
12-
<p>the winner is...</p>
13-
{winners.map(winnerId => {
14-
if (!ballot.candidateType || ballot.candidateType === 'book') {
15-
const book = getByProperty(candidates, Number(winnerId), 'id');
16-
return <li key={winnerId}>
17-
<img src={book?.info?.image || '/assets/nocover.jpeg'} alt={book?.info?.title}/>
18-
<div>
19-
<p>{book?.info?.title}{book?.info?.subtitle && <span>: {book.info.subtitle}</span>}</p>
20-
<p className="book-author">{book?.info?.authors?.join(', ')}</p>
21-
{book?.info?.price && <p>${book.info.price}</p>}
22-
</div>
23-
</li>;
24-
} else {
25-
return <li key={winnerId}>{winnerId}</li>;
26-
}
27-
})}
10+
return (
11+
<div className="ResultsPanel panel">
12+
<p>the winner is...</p>
13+
{winners.map(winnerId => {
14+
if (!ballot.candidateType || ballot.candidateType === 'book') {
15+
const book = candidates.find(c => c.id === Number(winnerId));
16+
17+
return (
18+
<li key={winnerId}>
19+
<img src={book?.info?.image || '/assets/nocover.jpeg'} alt={book?.info?.title}/>
20+
<div>
21+
<p>{book?.info?.title}{book?.info?.subtitle && <span>: {book.info.subtitle}</span>}</p>
22+
<p className="book-author">{book?.info?.authors?.join(', ')}</p>
23+
{book?.info?.price && <p>${book.info.price}</p>}
24+
</div>
25+
</li>
26+
);
27+
} else {
28+
return <li key={winnerId}>{winnerId}</li>;
29+
}
30+
})}
2831

29-
{/* <p>Based off {votes.length} votes.</p>
30-
<ul>
31-
{votes.map(vote => <li>{vote}</li>)}
32-
</ul> */}
33-
</div>;
32+
{/* <p>Based off {votes.length} votes.</p>
33+
<ul>
34+
{votes.map(vote => <li>{vote}</li>)}
35+
</ul> */}
36+
</div>
37+
);
3438
};
3539

3640
const MemoizedResultsPanel = React.memo(ResultsPanel);

src/pages/setup/PermissionsPanel.js

+7-6
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,25 @@ const PermissionsPanel = props => {
66
enableVoteCodeInput,
77
setEnableVoteCodeInput
88
} = props;
9+
const handleTextChange = e => setVoteCode(e.target.value);
910

1011
return (
1112
<fieldset className="panel PermissionsPanel">
1213
<label>
1314
<span title="requires users to know the voting code in order to submit a vote">
14-
<input
15-
type="checkbox"
15+
<input
16+
type="checkbox"
1617
onClick={e => {
1718
setEnableVoteCodeInput(!enableVoteCodeInput);
1819
if (!e.target.checked) setVoteCode(null);
1920
}}
2021
/>
2122
voting code:
2223
</span>
23-
<input
24-
type="text"
25-
onChange={setVoteCode}
26-
name="voteCode"
24+
<input
25+
type="text"
26+
onChange={handleTextChange}
27+
name="voteCode"
2728
disabled={!enableVoteCodeInput}
2829
placeholder="secret code"
2930
/>

src/pages/setup/SuggestPanel.css

+4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
display: flex;
1919
flex-direction: column;
2020
gap: 0.5rem;
21+
22+
&:empty {
23+
display: none;
24+
}
2125
}
2226

2327
.book-display li {

0 commit comments

Comments
 (0)