redux-boost
Version:
126 lines (99 loc) • 5.75 kB
JavaScript
import _regeneratorRuntime from 'babel-runtime/regenerator';
import _toConsumableArray from 'babel-runtime/helpers/toConsumableArray';
import _asyncToGenerator from 'babel-runtime/helpers/asyncToGenerator';
var _this = this;
import { requestActions } from '../requests/actions';
import { noop, identity } from '../utils';
function applyMethodToExecutor(executor, payload, method) {
return executor.get ? executor[method.toLowerCase()] : executor;
}
var defaultConfig = {
method: 'get',
serialize: identity,
serializeError: identity,
executor: global.fetch,
prepareExecutor: applyMethodToExecutor,
onError: identity,
onSuccess: identity,
saveRequestResult: true,
logError: true
/*
* config: {
* name,
* payload,
* method: 'get'
* serialize: identity,
* executor: global.fetch,
* prepareExecutor: fn,
* onSuccess: noop,
* onError: noop,
* }
*/
};export var 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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.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 _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(action.type !== 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 ? noop : _action$meta$resolve, _action$meta$reject = _action$meta.reject, reject = _action$meta$reject === undefined ? 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, _toConsumableArray(args));
case 13:
response = _context.sent;
data = response.data || response;
serialized = serialize(data);
resolve(serialized);
dispatch(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(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, _this, [[10, 22]]);
}));
return function (_x) {
return _ref2.apply(this, arguments);
};
}();
};
};
};