redux-saga
Version:
Saga middleware for Redux to handle Side Effects
49 lines (39 loc) • 1.52 kB
JavaScript
exports.__esModule = true;
exports.default = takeLatest;
var _fsmIterator = /*#__PURE__*/require('./fsmIterator');
var _fsmIterator2 = /*#__PURE__*/_interopRequireDefault(_fsmIterator);
var _io = /*#__PURE__*/require('../io');
var _channel = /*#__PURE__*/require('../channel');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function takeLatest(patternOrChannel, worker) {
for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
var yTake = { done: false, value: (0, _io.take)(patternOrChannel) };
var yFork = function yFork(ac) {
return { done: false, value: _io.fork.apply(undefined, [worker].concat(args, [ac])) };
};
var yCancel = function yCancel(task) {
return { done: false, value: (0, _io.cancel)(task) };
};
var task = void 0,
action = void 0;
var setTask = function setTask(t) {
return task = t;
};
var setAction = function setAction(ac) {
return action = ac;
};
return (0, _fsmIterator2.default)({
q1: function q1() {
return ['q2', yTake, setAction];
},
q2: function q2() {
return action === _channel.END ? [_fsmIterator.qEnd] : task ? ['q3', yCancel(task)] : ['q1', yFork(action), setTask];
},
q3: function q3() {
return ['q1', yFork(action), setTask];
}
}, 'q1', 'takeLatest(' + (0, _fsmIterator.safeName)(patternOrChannel) + ', ' + worker.name + ')');
}
;