redux-saga-devtools
Version:
Monitor and UI for redux-saga
101 lines (85 loc) • 2.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createSagaMonitor;
var _utils = require('redux-saga/utils');
var _redux = require('redux');
var _reducers = require('./reducers');
var _reducers2 = _interopRequireDefault(_reducers);
var _constants = require('./constants');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getTime() {
if (typeof performance !== 'undefined' && performance.now) return performance.now();else return Date.now();
}
function createSagaMonitor() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$time = _ref.time,
time = _ref$time === undefined ? getTime : _ref$time,
customDispatch = _ref.dispatch;
var store = void 0;
var dispatch = void 0;
if (typeof customDispatch === 'function') {
dispatch = customDispatch;
} else {
store = (0, _redux.createStore)(_reducers2.default);
dispatch = store.dispatch;
}
function effectTriggered(effect) {
dispatch({
type: _constants.EFFECT_TRIGGERED,
effect: effect,
time: time()
});
}
function effectResolved(effectId, result) {
if (_utils.is.task(result)) {
result.done.then(function (taskResult) {
if (result.isCancelled()) effectCancelled(effectId);else effectResolved(effectId, taskResult);
}, function (taskError) {
effectRejected(effectId, taskError);
});
} else {
var action = {
type: _constants.EFFECT_RESOLVED,
effectId: effectId,
result: result,
time: time()
};
dispatch(action);
}
}
function effectRejected(effectId, error) {
var action = {
type: _constants.EFFECT_REJECTED,
effectId: effectId,
error: error,
time: time()
};
dispatch(action);
}
function effectCancelled(effectId) {
var action = {
type: _constants.EFFECT_CANCELLED,
effectId: effectId,
time: time()
};
dispatch(action);
}
function actionDispatched(action) {
var isSagaAction = action[_utils.SAGA_ACTION];
var now = time();
dispatch({
type: _constants.ACTION_DISPATCHED,
id: now,
action: action,
isSagaAction: isSagaAction,
time: now
});
}
return {
get store() {
return store;
},
effectTriggered: effectTriggered, effectResolved: effectResolved, effectRejected: effectRejected, effectCancelled: effectCancelled, actionDispatched: actionDispatched };
}