UNPKG

@twreporter/redux

Version:

redux actions and reducers for twreporter website

87 lines (83 loc) 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fetchIndexPageContent = fetchIndexPageContent; var _url = require("../utils/url"); var _apiConfig = _interopRequireDefault(require("../constants/api-config")); var _apiEndpoints = _interopRequireDefault(require("../constants/api-endpoints")); var _axios = _interopRequireDefault(require("axios")); var _errorActionCreators = _interopRequireDefault(require("./error-action-creators")); var _reduxStateFieldNames = _interopRequireDefault(require("../constants/redux-state-field-names")); var _actionTypes = _interopRequireDefault(require("../constants/action-types")); var _get = _interopRequireDefault(require("lodash/get")); var _values = _interopRequireDefault(require("lodash/values")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } // lodash var _ = { get: _get["default"], values: _values["default"] }; /** * @param {Function} dispatch - dispatch of redux * @param {string} origin - URL origin * @param {string} path - URL path * @param {number} timeout - request timeout to api * @return {Promise} resolve with success action or reject with fail action **/ function _fetch(dispatch, origin, path, timeout) { var url = (0, _url.formURL)(origin, path); // Start to get content dispatch({ type: _actionTypes["default"].indexPage.read.request, url: url }); return _axios["default"].get(url, { timeout: timeout }) // Get content successfully .then(function (response) { var items = _.get(response, 'data.data', {}); var successAction = { type: _actionTypes["default"].indexPage.read.success, payload: { items: items } }; // dispatch content for each sections dispatch(successAction); return successAction; })["catch"](function (error) { var failAction = _errorActionCreators["default"].axios(error, _actionTypes["default"].indexPage.read.failure); dispatch(failAction); return Promise.reject(failAction); }); } /** * fetchIndexPageContent * This function will fetch the all sections except categories_section * on the index page, * including latest_section, editor_picks_section, latest_topic_section, * infographics_section, reviews_section, and photos_section. * * @param {number} [timeout=apiConfig.timeout] - request api timeout * @return {import('../typedef').Thunk} async action creator */ function fetchIndexPageContent() { var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _apiConfig["default"].timeout; return function (dispatch, getState) { /** @type {import('../typedef').ReduxState} */ var state = getState(); var indexPage = _.get(state, _reduxStateFieldNames["default"].indexPage, {}); var isContentReady = _.get(indexPage, 'isReady', false); if (isContentReady) { var action = { type: _actionTypes["default"].indexPage.read.alreadyExists }; dispatch(action); return Promise.resolve(action); } var apiOrigin = _.get(state, [_reduxStateFieldNames["default"].origins, 'api']); return _fetch(dispatch, apiOrigin, "/v2/".concat(_apiEndpoints["default"].indexPage), timeout); }; }