42 lines
809 B
JavaScript
42 lines
809 B
JavaScript
import {Map} from 'immutable';
|
|
|
|
const SET_STATE = 'SET_STATE';
|
|
const VOTE = 'VOTE';
|
|
|
|
|
|
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);
|
|
}
|
|
|
|
return state;
|
|
}
|
|
|
|
function resetVote(state) {
|
|
const hasVoted = state.get('hasVoted');
|
|
const currentPair = state.getIn(['vote', 'pair']);
|
|
if (hasVoted && ! currentPair.includes(hasVoted)) {
|
|
return state.remove('hasVoted');
|
|
}
|
|
|
|
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);
|
|
|
|
default:
|
|
return state;
|
|
}
|
|
} |