UNPKG

@talend/react-cmf

Version:

A framework built on top of best react libraries

60 lines (58 loc) 2.32 kB
"use strict"; 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