@talend/react-cmf
Version:
A framework built on top of best react libraries
60 lines (58 loc) • 2.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.get = get;
exports.handle = handle;
exports.isActionCancelable = void 0;
exports.onSagaStart = onSagaStart;
exports.register = register;
exports.registerMany = void 0;
var _effects = require("redux-saga/effects");
var _constant = _interopRequireDefault(require("../constant"));
var _registry = _interopRequireDefault(require("../registry"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* This function register a saga in the cmf registry
* @param {string} id the saga id you want
* @param {generator} saga the saga generator
* @param {object} context optional context to get the registry
*/
function register(id, saga, context) {
_registry.default.addToRegistry(`SAGA:${id}`, saga, context);
}
/**
* This function allow to get a saga from the registry
* @param {string} id the saga id you want
* @param {object} context optional context to get the registry
*/
function get(id, context) {
return _registry.default.getFromRegistry(`SAGA:${id}`, context);
}
const registerMany = exports.registerMany = _registry.default.getRegisterMany(register);
const isActionCancelable = startAction => action => action.type === `${_constant.default.WILL_UNMOUNT_SAGA_STOP}_${startAction.saga}` && startAction.event.componentId === action.event.componentId;
exports.isActionCancelable = isActionCancelable;
function* onSagaStart(action) {
const isSagaInfoAnObject = typeof action.saga === 'object';
const sagaId = isSagaInfoAnObject ? action.saga.id : action.saga;
if (!sagaId) {
throw new Error(`no saga id found in action: ${JSON.stringify(action)}`);
}
const sagaArgs = isSagaInfoAnObject ? action.saga.args : [];
const saga = get(sagaId);
if (!saga) {
throw new Error(`saga not found: ${sagaId}`);
}
const task = yield (0, _effects.spawn)(saga, {
...action.props,
// deprecated: you should only read { componentId }
componentId: action.componentId
}, ...sagaArgs);
yield (0, _effects.take)(isActionCancelable(action));
yield (0, _effects.cancel)(task);
}
function* handle() {
yield (0, _effects.takeEvery)(_constant.default.DID_MOUNT_SAGA_START, onSagaStart);
yield (0, _effects.take)('DO_NOT_QUIT');
}
//# sourceMappingURL=component.js.map