redux-boost
Version:
142 lines (107 loc) • 6.28 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createRequestMiddleware = undefined;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _actions = require('../requests/actions');
var _utils = require('../utils');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function applyMethodToExecutor(executor, payload, method) {
return executor.get ? executor[method.toLowerCase()] : executor;
}
var defaultConfig = {
method: 'get',
serialize: _utils.identity,
serializeError: _utils.identity,
executor: global.fetch,
prepareExecutor: applyMethodToExecutor,
onError: _utils.identity,
onSuccess: _utils.identity,
saveRequestResult: true,
logError: true
/*
* config: {
* name,
* payload,
* method: 'get'
* serialize: identity,
* executor: global.fetch,
* prepareExecutor: fn,
* onSuccess: noop,
* onError: noop,
* }
*/
};var createRequestMiddleware = exports.createRequestMiddleware = function createRequestMiddleware(customConfig) {
return function (_ref) {
var dispatch = _ref.dispatch;
// Apply default values to the custom config
var config = Object.assign(defaultConfig, customConfig);
return function (next) {
return function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(action) {
var _action$payload, name, payload, _action$payload$metho, method, _action$payload$seria, serialize, _action$payload$seria2, serializeError, _action$payload$execu, executor, _action$payload$prepa, prepareExecutor, _action$payload$saveR, saveRequestResult, _action$payload$onErr, onError, _action$payload$onSuc, onSuccess, _action$meta, _action$meta$resolve, resolve, _action$meta$reject, reject, args, fetch, response, data, serialized, error;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(action.type !== _actions.requestActions.fetchStart.type)) {
_context.next = 2;
break;
}
return _context.abrupt('return', next(action));
case 2:
next(action);
_action$payload = action.payload;
_action$payload = _action$payload === undefined ? {} : _action$payload;
name = _action$payload.name, payload = _action$payload.payload, _action$payload$metho = _action$payload.method, method = _action$payload$metho === undefined ? config.method : _action$payload$metho, _action$payload$seria = _action$payload.serialize, serialize = _action$payload$seria === undefined ? config.serialize : _action$payload$seria, _action$payload$seria2 = _action$payload.serializeError, serializeError = _action$payload$seria2 === undefined ? config.serializeError : _action$payload$seria2, _action$payload$execu = _action$payload.executor, executor = _action$payload$execu === undefined ? config.executor : _action$payload$execu, _action$payload$prepa = _action$payload.prepareExecutor, prepareExecutor = _action$payload$prepa === undefined ? config.prepareExecutor : _action$payload$prepa, _action$payload$saveR = _action$payload.saveRequestResult, saveRequestResult = _action$payload$saveR === undefined ? config.saveRequestResult : _action$payload$saveR, _action$payload$onErr = _action$payload.onError, onError = _action$payload$onErr === undefined ? config.onError : _action$payload$onErr, _action$payload$onSuc = _action$payload.onSuccess, onSuccess = _action$payload$onSuc === undefined ? config.onSuccess : _action$payload$onSuc, _action$meta = action.meta;
_action$meta = _action$meta === undefined ? {} : _action$meta;
_action$meta$resolve = _action$meta.resolve, resolve = _action$meta$resolve === undefined ? _utils.noop : _action$meta$resolve, _action$meta$reject = _action$meta.reject, reject = _action$meta$reject === undefined ? _utils.noop : _action$meta$reject;
args = Array.isArray(payload) ? payload : [payload];
fetch = prepareExecutor(executor, action.payload, method);
_context.prev = 10;
_context.next = 13;
return fetch.apply(undefined, (0, _toConsumableArray3.default)(args));
case 13:
response = _context.sent;
data = response.data || response;
serialized = serialize(data);
resolve(serialized);
dispatch(_actions.requestActions.fetchSuccess({
name: name,
result: serialized,
saveRequestResult: saveRequestResult
}));
onSuccess({ name: name, result: serialized });
return _context.abrupt('return', serialized);
case 22:
_context.prev = 22;
_context.t0 = _context['catch'](10);
error = serializeError(_context.t0);
reject(error);
dispatch(_actions.requestActions.fetchFail({ name: name, error: error }));
onError({ name: name, error: error });
if (config.logError) {
// eslint-disable-next-line no-console
console.error(error);
}
return _context.abrupt('return', error);
case 30:
case 'end':
return _context.stop();
}
}
}, _callee, undefined, [[10, 22]]);
}));
return function (_x) {
return _ref2.apply(this, arguments);
};
}();
};
};
};