@stackend/api
Version:
JS bindings to api.stackend.com
89 lines • 2.79 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.XCAP_VOTES_UPDATE = exports.XCAP_VOTES_RECEIVED = void 0;
var immutability_helper_1 = __importDefault(require("immutability-helper"));
exports.XCAP_VOTES_RECEIVED = 'XCAP_VOTES_RECEIVED';
exports.XCAP_VOTES_UPDATE = 'XCAP_VOTES_UPDATE';
/**
* Update the votes
* @param state
* @param context
* @param voteSummary
* @param votes
* @param vote
* @param hasVoted
* @param myReview
*/
function updateVotes(_a) {
var state = _a.state, context = _a.context, voteSummary = _a.voteSummary, votes = _a.votes, vote = _a.vote, hasVoted = _a.hasVoted, myReview = _a.myReview;
var x = Object.assign({}, state);
if (!x[context]) {
x[context] = {};
}
var refId = voteSummary.referenceId;
if (!x[context][refId]) {
x[context][refId] = {
voteSummary: voteSummary,
votes: {},
hasVoted: false,
myReview: null
};
}
var v = Object.assign({}, x[context][refId]);
v.voteSummary = voteSummary;
if (votes) {
v = (0, immutability_helper_1.default)(v, {
votes: { $merge: votes }
});
}
if (vote) {
v.votes[vote.referenceGroupId] = vote;
}
if (typeof hasVoted === 'boolean') {
v.hasVoted = hasVoted;
}
if (myReview) {
if (v.myReview) {
console.log('D=', v.myReview.modifiedDate, myReview.modifiedDate);
}
v.myReview = myReview;
}
x.n = Math.random(); // Hack to make this update
x[context][refId] = v;
return x;
}
var voteReducer = function (state, action) {
if (state === void 0) { state = {}; }
var c = state;
switch (action.type) {
case exports.XCAP_VOTES_RECEIVED:
c = updateVotes({
state: state,
context: action.context,
voteSummary: action.voteSummary,
votes: action.votes,
hasVoted: action.hasVoted,
myReview: action.myReview
});
break;
case exports.XCAP_VOTES_UPDATE:
c = updateVotes({
state: state,
context: action.context,
voteSummary: action.voteSummary,
vote: action.vote,
hasVoted: action.hasVoted,
myReview: action.myReview
});
//console.log('XCAP_VOTES_UPDATE', state, c, 'same=', state === c);
break;
default:
break;
}
return c;
};
exports.default = voteReducer;
//# sourceMappingURL=voteReducer.js.map