UNPKG

@twreporter/redux

Version:

redux actions and reducers for twreporter website

91 lines (85 loc) 3.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fetchAuthorDetails = fetchAuthorDetails; exports.receiveFetchAuthorDetails = receiveFetchAuthorDetails; exports.requestFetchAuthorDetails = requestFetchAuthorDetails; var _articleSchema = require("../schemas/article-schema"); var _humps = require("humps"); var _url = require("../utils/url"); var _normalizr = require("normalizr"); var _actionTypes = _interopRequireDefault(require("../constants/action-types")); var _axios = _interopRequireDefault(require("axios")); var _errorActionCreators = _interopRequireDefault(require("./error-action-creators")); var _reduxStateFieldNames = _interopRequireDefault(require("../constants/redux-state-field-names")); var _assign = _interopRequireDefault(require("lodash/assign")); var _get = _interopRequireDefault(require("lodash/get")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } // lodash var _ = { assign: _assign["default"], get: _get["default"] }; function requestFetchAuthorDetails(authorId) { return { type: _actionTypes["default"].authorDetails.read.request, payload: { authorId: authorId } }; } /** * @typedef NormalizedDataOfAuthorDetails * @property {string} result * @property {Object} entities * @property {Object|undefined} entities.authors */ /** * @typedef SuccessActionOfFetchAuthorDetails * @property {string} type - Action type * @property {Object} payload - Action payload * @property {NormalizedDataOfAuthorDetails} payload.normalizedData */ /** * @param {NormalizedDataOfAuthorDetails} normalizedData * @returns {SuccessActionOfFetchAuthorDetails} */ function receiveFetchAuthorDetails(normalizedData) { return { type: _actionTypes["default"].authorDetails.read.success, payload: { normalizedData: normalizedData } }; } function fetchAuthorDetails(authorId) { /** * @param {Function} dispatch - Redux store dispatch function * @param {Function} getState - Redux store getState function * @return {Promise} resolve with success action or reject with fail action */ return function (dispatch, getState) { var searchParas = { author_id: authorId }; var state = getState(); var apiOrigin = _.get(state, [_reduxStateFieldNames["default"].origins, 'api']); var url = (0, _url.formURL)(apiOrigin, "/v2/authors/".concat(authorId), searchParas); dispatch(requestFetchAuthorDetails(authorId)); return _axios["default"].get(url).then(function (_ref) { var data = _ref.data; var author = _.assign({}, _.get(data, 'data')); /** type {NormalizedDataOfAuthorDetails} */ var normalizedData = (0, _normalizr.normalize)((0, _humps.camelizeKeys)(author), _articleSchema.author); /** type {SuccessActionOfFetchAuthorDetails} */ var successAction = receiveFetchAuthorDetails(normalizedData); dispatch(successAction); return successAction; }, function (error) { var failAction = _errorActionCreators["default"].axios(error, _actionTypes["default"].authorDetails.read.failure); dispatch(failAction); return Promise.reject(failAction); }); }; }