UNPKG

@stackend/api

Version:

JS bindings to api.stackend.com

96 lines 3.85 kB
"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