@stackend/api
Version:
JS bindings to api.stackend.com
128 lines • 5.76 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RECEIVE_RESOURCE_USAGE = exports.REMOVE_COMMUNITY = exports.REMOVE_COMMUNITIES = exports.SET_COMMUNITY_SETTINGS = exports.UPDATE_COMMUNITY = exports.RECEIVE_COMMUNITIES = exports.REQUEST_COMMUNITIES = exports.KEY = void 0;
// @flow
var immutability_helper_1 = __importDefault(require("immutability-helper"));
var api_1 = require("../api");
exports.KEY = 'COMMUNITIES';
exports.REQUEST_COMMUNITIES = 'REQUEST_COMMUNITIES';
exports.RECEIVE_COMMUNITIES = 'RECEIVE_COMMUNITIES';
exports.UPDATE_COMMUNITY = 'UPDATE_COMMUNITY';
exports.SET_COMMUNITY_SETTINGS = 'SET_COMMUNITY_SETTINGS';
exports.REMOVE_COMMUNITIES = 'REMOVE_COMMUNITIES';
exports.REMOVE_COMMUNITY = 'REMOVE_COMMUNITY';
exports.RECEIVE_RESOURCE_USAGE = 'RECEIVE_RESOURCE_USAGE';
//Reducer
function communityReducer(state, action) {
var _a;
var _b;
if (state === void 0) { state = {
objectsRequiringModeration: {}
}; }
switch (action.type) {
case exports.REQUEST_COMMUNITIES:
return Object.assign({}, state, {
isFetching: true,
didInvalidate: false
});
case exports.RECEIVE_COMMUNITIES:
return Object.assign({}, state, {
isFetching: false,
didInvalidate: false,
lastUpdated: action.receivedAt,
communities: action.json.results,
statistics: action.json.statistics
});
case exports.UPDATE_COMMUNITY: {
var u = action.community;
if (state.communities) {
var entries = state.communities.entries;
var found = false;
for (var i = 0; i < entries.length; i++) {
var e = entries[i];
if (e.id === u.id) {
found = true;
e.name = u.name;
e.description = u.description;
e.status = u.status;
e.domains = u.domains;
break;
}
}
if (!found) {
entries.push(action.community);
}
var newCommunities = Object.assign({}, state.communities);
return (0, immutability_helper_1.default)(state, {
isFetching: { $set: false },
didInvalidate: { $set: false },
lastUpdated: { $set: action.receivedAt },
communities: { $set: newCommunities }
});
}
return state;
}
case exports.SET_COMMUNITY_SETTINGS: {
var objectsRequiringModeration = state.objectsRequiringModeration;
var communities = state.communities;
if (action.community) {
// FIXME: Use of window still needed for xcap.js and old javascripts
if ((0, api_1.isRunningInBrowser)()) {
window.xcapCommunityName = action.community.name;
window.xcapCommunityPermalink = action.community.permalink;
}
objectsRequiringModeration = Object.assign({}, state.objectsRequiringModeration, (_a = {},
_a[action.community.id] = action.objectsRequiringModeration || 0,
_a));
// May also update a community in the list
if (state.communities) {
var c = (_b = state.communities) === null || _b === void 0 ? void 0 : _b.entries.find(function (c) { return c.id === action.community.id; });
if (c) {
Object.assign(c, action.community);
}
communities = Object.assign({}, communities);
}
}
return (0, immutability_helper_1.default)(state, {
community: { $set: action.community || null },
communities: { $set: communities },
objectsRequiringModeration: { $set: objectsRequiringModeration }
});
}
case exports.REMOVE_COMMUNITIES:
//window.xcapCommunityName = '';
//window.xcapCommunityPermalink = '';
return {
objectsRequiringModeration: {}
};
case exports.REMOVE_COMMUNITY: {
var objectsRequiringModeration = state.objectsRequiringModeration;
if (state.community) {
objectsRequiringModeration = Object.assign({}, state.objectsRequiringModeration);
delete objectsRequiringModeration[state.community.id];
}
return (0, immutability_helper_1.default)(state, {
community: { $set: null },
objectsRequiringModeration: { $set: objectsRequiringModeration }
});
}
case exports.RECEIVE_RESOURCE_USAGE:
return (0, immutability_helper_1.default)(state, {
resourceUsage: {
$set: {
maximumUseBeforeCharge: action.maximumUseBeforeCharge,
resourceUsageLast30Days: action.resourceUsageLast30Days,
hasPaymentMethod: action.hasPaymentMethod,
isUserExcludedFromBilling: action.isUserExcludedFromBilling
}
}
});
default:
return state;
}
}
exports.default = communityReducer;
//# sourceMappingURL=communityReducer.js.map