UNPKG

twreporter-react-index-page

Version:
200 lines (164 loc) 6.29 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _clone = require('lodash/clone'); var _clone2 = _interopRequireDefault(_clone); var _reduxStateFields = require('../constants/redux-state-fields'); var _reduxStateFields2 = _interopRequireDefault(_reduxStateFields); var _get = require('lodash/get'); var _get2 = _interopRequireDefault(_get); var _actionTypes = require('../constants/action-types'); var _actionTypes2 = _interopRequireDefault(_actionTypes); var _merge = require('lodash/merge'); var _merge2 = _interopRequireDefault(_merge); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /* eslint no-param-reassign: ["error", { "props": false }]*/ var _ = { get: _get2.default, clone: _clone2.default, merge: _merge2.default }; function putEntities() { var entityArr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var entityMap = arguments[1]; var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var _entities = entityArr; if (!Array.isArray(entityArr)) { _entities = [entityArr]; } _entities.forEach(function (entity) { if (!entity) { return; } var slug = _.get(entity, 'slug'); if (!Object.prototype.hasOwnProperty.call(entityMap, slug) || force) { entityMap[slug] = entity; } }); } function entities() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var postEntityMap = void 0; var topicEntityMap = void 0; var payload = void 0; switch (action.type) { case _actionTypes2.default.GET_CONTENT_FOR_INDEX_PAGE: { var _$merge; // This will normalize the posts and topics. // EX: // action = { // latest: [{ // slug: 'post_1' // is_feature: false, // style: 'article' // }, { // slug: 'post_2' // is_feature: false, // style: 'article' // }], // editor_picks: [{ // slug: 'post_3', // is_feature: true // style: 'article' // }], // reviews: [{ // slug: 'post_4', // is_feature: false // style: 'review' // }], // latest_topics: { // slug: 'topic_1', // relateds: [{ // slug: 'post_5' // is_feature: false // style: 'article' // },{ // slug: 'post_6' // is_feature: false // style: 'article' // }] // } // } // // the result will be // { // posts: { // 'post_1': { // slug: 'post_1' // is_feature: false, // style: 'article' // }, // 'post_2': { // slug: 'post_2' // is_feature: false, // style: 'article' // }, // 'post_3': { // slug: 'post_3' // is_feature: true, // style: 'article' // }, // 'post_4': { // slug: 'post_4' // is_feature: false, // style: 'review' // }, // 'post_5': { // slug: 'post_5' // is_feature: false, // style: 'article' // }, // 'post_6': { // slug: 'post_6' // is_feature: false, // style: 'article' // }, // }, // topics: { // 'topic_1': { // slug: 'topic_1', // relateds: [ 'post_5', 'post_6'] // } // } // } postEntityMap = _.clone(_.get(state, _reduxStateFields2.default.posts, {})); topicEntityMap = _.clone(_.get(state, _reduxStateFields2.default.topics, {})); putEntities(_.get(action, 'payload.' + _reduxStateFields2.default.latest, []), postEntityMap); putEntities(_.get(action, 'payload.' + _reduxStateFields2.default.editorPicks, []), postEntityMap); putEntities(_.get(action, 'payload.' + _reduxStateFields2.default.reviews, []), postEntityMap); var latestTopic = _.get(action, 'payload.' + _reduxStateFields2.default.latestTopic, {}); var relatedPostsInTopic = _.get(latestTopic, _reduxStateFields2.default.relateds, []); latestTopic[_reduxStateFields2.default.relateds] = relatedPostsInTopic.map(function (post) { return _.get(post, 'slug'); }); putEntities(relatedPostsInTopic, postEntityMap); putEntities(_.get(action, 'payload.' + _reduxStateFields2.default.latestTopic), topicEntityMap, true); return _.merge({}, state, (_$merge = {}, _defineProperty(_$merge, _reduxStateFields2.default.posts, postEntityMap), _defineProperty(_$merge, _reduxStateFields2.default.topics, topicEntityMap), _$merge)); } case _actionTypes2.default.GET_TOPICS_FOR_INDEX_PAGE: { // existing topic entity map topicEntityMap = _.clone(_.get(state, _reduxStateFields2.default.topics, {})); // topics we get from api payload = action.payload; putEntities(payload, topicEntityMap); return _.merge({}, state, _defineProperty({}, _reduxStateFields2.default.topics, topicEntityMap)); } case _actionTypes2.default.GET_PHOTOGRAPHY_POSTS_FOR_INDEX_PAGE: case _actionTypes2.default.GET_INFOGRAPHIC_POSTS_FOR_INDEX_PAGE: { // existing post entity map postEntityMap = _.clone(_.get(state, _reduxStateFields2.default.posts, {})); // topics we get from api payload = action.payload; putEntities(payload, postEntityMap); return _.merge({}, state, _defineProperty({}, _reduxStateFields2.default.posts, postEntityMap)); } default: return state; } } exports.default = entities;