redux-saga-routines
Version:
Routines for redux-saga also useful with redux-form
85 lines (67 loc) • 2.91 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.handleRoutinePromiseAction = handleRoutinePromiseAction;
exports["default"] = routinePromiseWatcherSaga;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _effects = require("redux-saga/effects");
var _constants = require("./constants");
var _marked = /*#__PURE__*/_regenerator["default"].mark(handleRoutinePromiseAction),
_marked2 = /*#__PURE__*/_regenerator["default"].mark(routinePromiseWatcherSaga);
var getPayload = function getPayload(data) {
return data && data.payload || data;
};
function handleRoutinePromiseAction(action) {
var payload, _action$meta, routine, noSuccessPayload, _action$meta$defer, resolve, reject, _yield$all, _yield$all2, _yield$all2$, success, failure;
return _regenerator["default"].wrap(function handleRoutinePromiseAction$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
payload = action.payload, _action$meta = action.meta, routine = _action$meta.routine, noSuccessPayload = _action$meta.noSuccessPayload, _action$meta$defer = _action$meta.defer, resolve = _action$meta$defer.resolve, reject = _action$meta$defer.reject;
_context.next = 3;
return (0, _effects.all)([(0, _effects.race)({
success: (0, _effects.take)(routine.SUCCESS),
failure: (0, _effects.take)(routine.FAILURE)
}), (0, _effects.put)(routine.trigger(payload))]);
case 3:
_yield$all = _context.sent;
_yield$all2 = (0, _slicedToArray2["default"])(_yield$all, 1);
_yield$all2$ = _yield$all2[0];
success = _yield$all2$.success;
failure = _yield$all2$.failure;
if (!success) {
_context.next = 13;
break;
}
_context.next = 11;
return noSuccessPayload ? (0, _effects.call)(resolve) : (0, _effects.call)(resolve, getPayload(success));
case 11:
_context.next = 15;
break;
case 13:
_context.next = 15;
return (0, _effects.call)(reject, getPayload(failure));
case 15:
case "end":
return _context.stop();
}
}
}, _marked);
}
function routinePromiseWatcherSaga() {
return _regenerator["default"].wrap(function routinePromiseWatcherSaga$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return (0, _effects.takeEvery)(_constants.ROUTINE_PROMISE_ACTION, handleRoutinePromiseAction);
case 2:
case "end":
return _context2.stop();
}
}
}, _marked2);
}