@kineticdata/react
Version:
A React library for the Kinetic Platform
128 lines (126 loc) • 5.26 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.sagaMiddleware = exports.runSaga = exports.regSaga = exports.commitSagas = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regeneratorRuntime"));
var _reduxSaga = _interopRequireDefault(require("redux-saga"));
var effects = _interopRequireWildcard(require("redux-saga/effects"));
var _symbols = require("@redux-saga/symbols");
// The list of saga effects that we support using as a single argument to the
// regSaga function.
var supportedEffects = [effects.takeEvery('NOOP', /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee() {
return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
case "end":
return _context.stop();
}
}, _callee);
})).payload.fn, effects.takeLatest('NOOP', /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee2() {
return (0, _regeneratorRuntime2["default"])().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
case "end":
return _context2.stop();
}
}, _callee2);
})).payload.fn, effects.takeLeading('NOOP', /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee3() {
return (0, _regeneratorRuntime2["default"])().wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
case "end":
return _context3.stop();
}
}, _callee3);
})).payload.fn, effects.throttle(0, 'NOOP', /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee4() {
return (0, _regeneratorRuntime2["default"])().wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
case "end":
return _context4.stop();
}
}, _callee4);
})).payload.fn, effects.debounce(0, 'NOOP', /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee5() {
return (0, _regeneratorRuntime2["default"])().wrap(function _callee5$(_context5) {
while (1) switch (_context5.prev = _context5.next) {
case 0:
case "end":
return _context5.stop();
}
}, _callee5);
})).payload.fn];
var parseSagaEffect = function parseSagaEffect(sagaEffect) {
if (sagaEffect[_symbols.IO]) {
if (supportedEffects.includes(sagaEffect.payload.fn)) {
var args = sagaEffect.payload.args;
var name = typeof args[0] === 'number' ? args[1] : args[0];
var genFn = typeof args[0] === 'number' ? args[2] : args[1];
if (typeof name === 'string') {
return {
name: name,
genFn: genFn
};
} else {
throw new Error('regSaga called with saga effect that had non-string pattern');
}
} else {
throw new Error('regSaga called with an unsupported saga effect, must be one of takeEvery, takeLatest, takeLeading, throttle, debounce');
}
} else {
throw new Error('regSaga called with single value that is not not a saga effect');
}
};
var sagaMiddleware = exports.sagaMiddleware = (0, _reduxSaga["default"])();
var generatorFns = {};
var runningTasks = {};
var pendingTasks = {};
/**
* Takes either a single argument which should be a saga effect that we can
* extract from which we can extract the name automatically. Or a pair of
* arguments, the name and the saga generator function.
*/
var regSaga = exports.regSaga = function regSaga(arg0, arg1) {
if (arg1) {
pendingTasks[arg0] = arg1;
generatorFns[arg0] = arg1;
} else {
var _parseSagaEffect = parseSagaEffect(arg0),
name = _parseSagaEffect.name,
genFn = _parseSagaEffect.genFn;
pendingTasks[name] = /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee6() {
return (0, _regeneratorRuntime2["default"])().wrap(function _callee6$(_context6) {
while (1) switch (_context6.prev = _context6.next) {
case 0:
_context6.next = 2;
return arg0;
case 2:
case "end":
return _context6.stop();
}
}, _callee6);
});
generatorFns[name] = genFn;
}
};
var commitSagas = exports.commitSagas = function commitSagas() {
Object.entries(pendingTasks).forEach(function (_ref) {
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
name = _ref2[0],
saga = _ref2[1];
if (runningTasks[name] && runningTasks[name].isRunning()) {
runningTasks[name].cancel();
}
runningTasks[name] = sagaMiddleware.run(saga);
delete pendingTasks[name];
});
};
var runSaga = exports.runSaga = function runSaga(name) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
return generatorFns[name].apply(generatorFns, args);
};