tutorials/frontendJS/full-stack-react-redux/voting-server/src/core.js

46 lines
916 B
JavaScript

import {List, Map} from 'immutable';
export const INITIAL_STATE = Map();
export function setEntries(state, entries) {
return state.set('entries', List(entries));
}
function getWinners(vote) {
if ( ! vote) return [];
const [a, b] = vote.get('pair');
const aVotes = vote.getIn(['tally', a], 0);
const bVotes = vote.getIn(['tally', b], 0);
if (aVotes > bVotes) return [a];
else if (aVotes < bVotes) return [b];
else {
return [a, b]
}
}
export function next(state) {
const entries = state.get('entries')
.concat(getWinners(state.get('vote')));
if (entries.size === 1) {
return state.remove('vote')
.remove('entries')
.set('winner', entries.first());
} else {
return state.merge({
vote: Map({
pair: entries.take(2)
}),
entries: entries.skip(2)
});
}
}
export function vote(voteState, entry) {
return voteState.updateIn(
['tally', entry],
0,
tally => tally + 1
);
}