@stackend/api
Version:
JS bindings to api.stackend.com
55 lines • 1.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Likes = exports.CLEAR_LIKES = exports.RECEIVE_LIKES = exports.UPDATE_LIKE = void 0;
exports.UPDATE_LIKE = 'UPDATE_LIKE';
exports.RECEIVE_LIKES = 'RECEIVE_LIKES';
exports.CLEAR_LIKES = 'CLEAR_LIKES';
function Likes(state, action) {
if (state === void 0) { state = {}; }
switch (action.type) {
case exports.CLEAR_LIKES:
return {};
// like / unlike
case exports.UPDATE_LIKE: {
return updateLike(Object.assign({}, state), action.obfuscatedReference, action.likes, action.likedByCurrentUser);
}
case exports.RECEIVE_LIKES: {
if (action.likes) {
var x_1 = Object.assign({}, state);
Object.keys(action.likes).forEach(function (oRef) {
var v = action.likes[oRef]; // Stupid compiler
updateLike(x_1, oRef, v.likes, v.likedByCurrentUser);
});
return x_1;
}
}
}
return state;
}
exports.Likes = Likes;
function updateLike(s, oRef, likes, likedByCurrentUser) {
var v = s[oRef];
if (!v) {
v = {
likes: typeof likes === 'number' ? likes : likedByCurrentUser ? 1 : 0
};
}
if (typeof likes === 'number') {
v.likes = likes;
}
if (likedByCurrentUser) {
v.likedByCurrentUser = true;
}
else {
delete v.likedByCurrentUser;
}
if (v.likes == 0 && typeof v.likedByCurrentUser === 'undefined') {
delete s[oRef];
}
else {
s[oRef] = v;
}
return s;
}
exports.default = Likes;
//# sourceMappingURL=likeReducer.js.map