twreporter-react-index-page
Version:
twreporter index page version 2
89 lines (65 loc) • 3.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.fetchIndexPageContent = fetchIndexPageContent;
var _axios = require('axios');
var _axios2 = _interopRequireDefault(_axios);
var _get = require('lodash/get');
var _get2 = _interopRequireDefault(_get);
var _actionTypes = require('../constants/action-types');
var _actionTypes2 = _interopRequireDefault(_actionTypes);
var _reduxStateFields = require('../constants/redux-state-fields');
var _reduxStateFields2 = _interopRequireDefault(_reduxStateFields);
var _apiEndpoints = require('../constants/api-endpoints');
var _apiEndpoints2 = _interopRequireDefault(_apiEndpoints);
var _formApiUrl = require('../utils/form-api-url');
var _formApiUrl2 = _interopRequireDefault(_formApiUrl);
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; }
// lodash
var _ = {
get: _get2.default
/**
* fetchIndexPageContent
* This function will fetch the top fourth sections on the index page,
* including latest, editor_picks, latest_topic and reviews
*/
};function fetchIndexPageContent() {
return function (dispatch, getState) {
var state = getState();
var indexPage = _.get(state, _reduxStateFields2.default.indexPage);
var fields = [_reduxStateFields2.default.latest, _reduxStateFields2.default.editorPicks, _reduxStateFields2.default.latestTopic, _reduxStateFields2.default.reviews];
var isContentReady = true;
fields.forEach(function (field) {
if (!Object.prototype.hasOwnProperty.call(indexPage, field)) {
isContentReady = false;
}
});
if (isContentReady) {
return null;
}
var path = '' + _apiEndpoints2.default.indexPage;
// Start to get content
dispatch({
type: _actionTypes2.default.START_TO_GET_INDEX_PAGE_CONTENT
});
return _axios2.default.get((0, _formApiUrl2.default)(path))
// Get content successfully
.then(function (response) {
var _payload;
var items = _.get(response, 'data.records', {});
// dispatch content for each sections
return dispatch({
type: _actionTypes2.default.GET_CONTENT_FOR_INDEX_PAGE,
payload: (_payload = {}, _defineProperty(_payload, _reduxStateFields2.default.latest, _.get(items, _reduxStateFields2.default.latest, [])), _defineProperty(_payload, _reduxStateFields2.default.editorPicks, _.get(items, _reduxStateFields2.default.editorPicks, [])), _defineProperty(_payload, _reduxStateFields2.default.latestTopic, _.get(items, _reduxStateFields2.default.latestTopic + '.0', {})), _defineProperty(_payload, _reduxStateFields2.default.reviews, _.get(items, _reduxStateFields2.default.reviews, [])), _payload)
});
}).catch(function (error) {
// Error to get topics
return dispatch({
type: _actionTypes2.default.ERROR_TO_GET_INDEX_PAGE_CONTENT,
errorMsg: error.toString()
});
});
};
}