-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreducer.js
More file actions
34 lines (30 loc) · 801 Bytes
/
reducer.js
File metadata and controls
34 lines (30 loc) · 801 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import {List, Map} from "immutable";
function setState(state, newState) {
return state.merge(newState);
}
function vote(state, entry) {
const currentPair = state.getIn(["vote", "pair"]);
if (currentPair && currentPair.includes(entry)) {
return state.set("hasVoted", entry);
} else {
return state;
}
}
function resetVote(state) {
const hasVoted = state.get("hasVoted");
const currentPair = state.getIn(["vote", "pair"], List());
if (hasVoted && !currentPair.includes(hasVoted)) {
return state.remove("hasVoted");
} else {
return state;
}
}
export default function(state = Map(), action) {
switch (action.type) {
case "SET_STATE":
return resetVote(setState(state, action.state));
case "VOTE":
return vote(state, action.entry);
}
return state;
}