@stackend/api
Version:
JS bindings to api.stackend.com
119 lines • 5.89 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CATEGORIES_REMOVE_SELECTION = exports.CATEGORIES_TOGGLE_SELECTED = exports.INVALIDATE_AVAILABLE_CATEGORIES = exports.RECEIVE_AVAILABLE_CATEGORIES = exports.REQUEST_AVAILABLE_CATEGORIES = void 0;
// @flow
var immutability_helper_1 = __importDefault(require("immutability-helper"));
////Action Type
exports.REQUEST_AVAILABLE_CATEGORIES = 'REQUEST_AVAILABLE_CATEGORIES';
exports.RECEIVE_AVAILABLE_CATEGORIES = 'RECEIVE_AVAILABLE_CATEGORIES';
exports.INVALIDATE_AVAILABLE_CATEGORIES = 'INVALIDATE_AVAILABLE_CATEGORIES';
exports.CATEGORIES_TOGGLE_SELECTED = 'CATEGORIES_TOGGLE_SELECTED';
exports.CATEGORIES_REMOVE_SELECTION = 'CATEGORIES_REMOVE_SELECTION';
//Reducer
function categories(state, action) {
var _a, _b, _c, _d, _e, _f;
if (state === void 0) { state = {}; }
switch (action.type) {
case exports.REQUEST_AVAILABLE_CATEGORIES:
return (0, immutability_helper_1.default)(state, (_a = {},
_a[action.context] = {
$apply: function (context) {
return (0, immutability_helper_1.default)(context || { selected: {} }, {
isFetching: { $set: true },
didInvalidate: { $set: false },
available: { $set: state[action.context] ? state[action.context].available : '' }
});
}
},
_a));
case exports.RECEIVE_AVAILABLE_CATEGORIES:
return (0, immutability_helper_1.default)(state, (_b = {},
_b[action.context] = {
$apply: function (context) {
return (0, immutability_helper_1.default)(context || { selected: {} }, {
isFetching: { $set: false },
didInvalidate: { $set: false },
available: { $set: action.json },
lastUpdated: { $set: Date.now() }
});
}
},
_b));
case exports.INVALIDATE_AVAILABLE_CATEGORIES:
return (0, immutability_helper_1.default)(state, (_c = {},
_c[action.context] = {
$apply: function (context) {
return (0, immutability_helper_1.default)(context || { selected: {} }, {
didInvalidate: { $set: true }
});
}
},
_c));
case exports.CATEGORIES_TOGGLE_SELECTED: {
var categories_1 = !!state[action.context] &&
!!state[action.context].selected &&
// @ts-ignore
state[action.context].selected[action.reference];
var idOfClickedCategory_1 = categories_1
? categories_1.map(function (category) { return category.id; }).indexOf(action.category.id)
: -1;
if (idOfClickedCategory_1 !== -1) {
//category clicked is selected -> remove selection
return (0, immutability_helper_1.default)(state, (_d = {},
_d[action.context] = {
$apply: function (context) {
var _a;
return (0, immutability_helper_1.default)(context || { selected: {} }, {
selected: (_a = {},
_a[action.reference] = {
$apply: function (reference) { return (0, immutability_helper_1.default)(reference || [], { $splice: [[idOfClickedCategory_1, 1]] }); }
},
_a)
});
}
},
_d));
}
else {
//category clicked is not selected -> set selection
return (0, immutability_helper_1.default)(state, (_e = {},
_e[action.context] = {
$apply: function (context) {
var _a;
return (0, immutability_helper_1.default)(context || { selected: {} }, {
selected: (_a = {},
_a[action.reference] = {
$apply: function (reference) { return (0, immutability_helper_1.default)(reference || [], { $push: [action.category] }); }
},
_a)
});
}
},
_e));
}
}
case exports.CATEGORIES_REMOVE_SELECTION:
return (0, immutability_helper_1.default)(state, (_f = {},
_f[action.context] = {
$apply: function (context) {
var _a;
return (0, immutability_helper_1.default)(context || { selected: {} }, {
// @ts-ignore
selected: (_a = {},
_a[action.reference] = {
$apply: function (reference) { return (0, immutability_helper_1.default)(reference || [], { $set: [] }); }
},
_a)
});
}
},
_f));
default:
return state;
}
}
exports.default = categories;
//# sourceMappingURL=categoryReducer.js.map