ruddy
Version:
Modularized state-management tools for modern front-end applications. Manage dispatched messages in a clean and predictable way for either small or large scale projects
64 lines (50 loc) • 1.93 kB
JavaScript
;
exports.__esModule = true;
var _ = require('ramda/src/__');
var _2 = _interopRequireDefault(_);
var _test = require('ramda/src/test');
var _test2 = _interopRequireDefault(_test);
var _is = require('ramda/src/is');
var _is2 = _interopRequireDefault(_is);
var _curry = require('ramda/src/curry');
var _curry2 = _interopRequireDefault(_curry);
var _is3 = require('../util/is');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var createDispatchHandler = (0, _curry2.default)(function (dispatch, originalAction, nextAction) {
if ((0, _is3.isAction)(nextAction)) {
if (nextAction.type !== originalAction.type) {
return dispatch(nextAction);
}
return nextAction;
}
return originalAction;
});
exports.default = (0, _curry2.default)(function (logger, dispatch, enhancers, action) {
var handleDispatch = createDispatchHandler(dispatch, action);
if ((0, _is2.default)(Array, enhancers)) {
var isPatternMatch = (0, _test2.default)(_2.default, action.type);
enhancers.forEach(function (_ref) {
var pred = _ref[0],
en = _ref[1];
if ((0, _is2.default)(RegExp, pred) && isPatternMatch(pred) || (0, _is2.default)(String, pred) && pred === action.type || (0, _is2.default)(Function, pred) && pred(action)) {
try {
var nextAction = en(action);
handleDispatch(nextAction);
} catch (error) {
logger.error('Unable to enhance action: "' + action.type + '"', error);
}
}
});
} else if ((0, _is3.isPlainObj)(enhancers)) {
var enhance = enhancers[action.type];
if ((0, _is2.default)(Function, enhance)) {
try {
var nextAction = enhance(action);
return handleDispatch(nextAction);
} catch (error) {
logger.error('Unable to enhance action: "' + action.type + '"', error);
}
}
}
return action;
});