@twreporter/redux
Version:
redux actions and reducers for twreporter website
78 lines (74 loc) • 2.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = featureTopic;
var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
var _get = _interopRequireDefault(require("lodash/get"));
var _map = _interopRequireDefault(require("lodash/map"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
// lodash
var _ = {
get: _get["default"],
map: _map["default"]
};
/** @type {import('../typedef').FeatureTopic} */
var initialState = {
isFetching: false,
error: null,
id: '',
lastThreeRelatedPostIds: []
};
/**
* @param {import('../typedef').FeatureTopic} state
* @param {Object} [action={}]
* @param {string} [action.type]
* @param {Object} [action.payload]
* @param {Object} action.payload.topic
* @param {Object[]} action.payload.lastThreeRelatedPosts
* @param {Object} action.payload.error
*/
function featureTopic() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
switch (_.get(action, 'type', '')) {
case _actionTypes["default"].featureTopic.read.request:
{
return {
isFetching: true,
error: null,
id: '',
lastThreeRelatedPostIds: []
};
}
case _actionTypes["default"].featureTopic.read.failure:
{
var error = _.get(action, 'payload.error', null);
return {
isFetching: false,
error: error,
id: '',
lastThreeRelatedPostIds: []
};
}
case _actionTypes["default"].featureTopic.read.success:
{
var topicId = _.get(action, 'payload.topic.id', '');
if (!topicId) {
return state;
}
var relatedPosts = _.get(action, 'payload.lastThreeRelatedPosts', []);
var relatedPostIds = _.map(relatedPosts, function (post) {
return _.get(post, 'id', '');
});
return {
isFetching: false,
error: null,
id: topicId,
lastThreeRelatedPostIds: relatedPostIds
};
}
default:
return state;
}
}