redux-saga-watch-actions
Version:
Easily create watchers to map actions to sagas
42 lines (36 loc) • 1.52 kB
JavaScript
import { all, fork, take, takeEvery } from 'redux-saga/effects';
export const combineSagas = function combineSagas() {
for (var _len = arguments.length, sagas = new Array(_len), _key = 0; _key < _len; _key++) {
sagas[_key] = arguments[_key];
}
return function* () {
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
yield all(sagas.map(saga => fork(saga, ...args)));
};
};
export const watchNextAction = (actionType, saga) => function* () {
const action = yield take(actionType);
if (typeof saga === 'function') {
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
yield fork(saga, ...args.concat(action));
}
};
export const createWatcher = (actionType, saga) => function* () {
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
yield takeEvery(actionType, saga, ...args);
};
export const watchActions = function watchActions() {
let sagaMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return function* () {
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
args[_key5] = arguments[_key5];
}
yield all(Object.keys(sagaMap).map(actionType => createWatcher(actionType, sagaMap[actionType])(...args)));
};
};