UNPKG

@twreporter/redux

Version:

redux actions and reducers for twreporter website

85 lines (81 loc) 3.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fetchLatestTags = fetchLatestTags; 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, params, timeout) { var url = (0, _url.formURL)(origin, path, params); // Start to get content dispatch({ type: _actionTypes["default"].latest.read.request, url: url }); return _axios["default"].get(url, { timeout: timeout }) // Get content successfully .then(function (response) { var tags = _.get(response, 'data.data.records', []); var successAction = { type: _actionTypes["default"].latest.read.success, payload: { tags: tags } }; // dispatch content for each sections dispatch(successAction); return successAction; })["catch"](function (error) { var failAction = _errorActionCreators["default"].axios(error, _actionTypes["default"].latest.read.failure); dispatch(failAction); return Promise.reject(failAction); }); } /** * fetchLatestTags * * @param {number} [timeout=apiConfig.timeout] - request api timeout * @return {import('../typedef').Thunk} async action creator */ function fetchLatestTags() { 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 latestPage = _.get(state, _reduxStateFieldNames["default"].latest, {}); var isContentReady = _.get(latestPage, 'isReady', false); if (isContentReady) { var action = { type: _actionTypes["default"].latest.read.alreadyExists }; dispatch(action); return Promise.resolve(action); } var apiOrigin = _.get(state, [_reduxStateFieldNames["default"].origins, 'api']); return _fetch(dispatch, apiOrigin, "/v2/".concat(_apiEndpoints["default"].tags), { latest_order: 1 }, timeout); }; }