@stackend/api
Version:
JS bindings to api.stackend.com
96 lines • 3.85 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// @flow
var immutability_helper_1 = __importDefault(require("immutability-helper"));
var groupActions_1 = require("./groupActions");
var LoadingState_1 = __importDefault(require("../api/LoadingState"));
var initialState = {
isFetching: false,
didInvalidate: false,
lastUpdated: Date.now(),
entries: {},
idByPermalink: {},
myGroups: {
loadingState: LoadingState_1.default.NOT_STARTED,
ids: []
},
auth: {},
groupMembers: {}
};
function groups(state, action) {
if (state === void 0) { state = initialState; }
switch (action.type) {
case groupActions_1.REQUEST_GROUPS:
return (0, immutability_helper_1.default)(state, {
isFetching: { $set: true },
didInvalidate: { $set: false }
});
case groupActions_1.RECEIVE_GROUPS:
// FIXME: action.errors not passed on
if (action.entries) {
var uniqueGroupEntries_1 = {};
var newGroupIds_1 = [];
var idByPermalink_1 = {};
action.entries.forEach(function (group) {
uniqueGroupEntries_1[group.id] = group;
newGroupIds_1.push(group.id);
idByPermalink_1[group.permalink] = group.id;
});
var myGroups = state.myGroups;
if (action.mine) {
myGroups = Object.assign({}, myGroups, {
loadingState: LoadingState_1.default.READY,
ids: myGroups.ids.concat(newGroupIds_1)
});
}
return (0, immutability_helper_1.default)(state, {
isFetching: { $set: false },
didInvalidate: { $set: false },
lastUpdated: { $set: Date.now() },
entries: { $merge: uniqueGroupEntries_1 },
myGroups: { $set: myGroups },
idByPermalink: { $merge: idByPermalink_1 }
});
}
else {
var myGroups = state.myGroups;
if (action.mine) {
myGroups = Object.assign({}, myGroups, {
loadingState: LoadingState_1.default.READY
});
}
return (0, immutability_helper_1.default)(state, {
isFetching: { $set: false },
didInvalidate: { $set: false },
lastUpdated: { $set: Date.now() },
entries: { $merge: [] },
myGroups: { $set: myGroups }
});
}
case groupActions_1.INVALIDATE_GROUPS:
return (0, immutability_helper_1.default)(state, {
didInvalidate: { $set: true }
});
case groupActions_1.RECEIVE_GROUPS_AUTH:
return (0, immutability_helper_1.default)(state, {
isFetching: { $set: false },
didInvalidate: { $set: false },
lastUpdated: { $set: Date.now() },
auth: { $set: action.entries }
});
case groupActions_1.RECEIVE_GROUP_MEMBERS:
return (0, immutability_helper_1.default)(state, {
isFetching: { $set: false },
didInvalidate: { $set: false },
lastUpdated: { $set: Date.now() },
groupMembers: { $merge: action.groupMembers }
});
default:
return state;
}
}
exports.default = groups;
//# sourceMappingURL=groupReducer.js.map