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
47 lines (43 loc) • 1.54 kB
JavaScript
import _default4 from 'ramda/src/__';
import _default3 from 'ramda/src/test';
import _default2 from 'ramda/src/is';
import _default from 'ramda/src/curry';
import { isAction, isPlainObj } from '../util/is';
var createDispatchHandler = _default(function (dispatch, originalAction, nextAction) {
if (isAction(nextAction)) {
if (nextAction.type !== originalAction.type) {
return dispatch(nextAction);
}
return nextAction;
}
return originalAction;
});
export default _default(function (logger, dispatch, enhancers, action) {
var handleDispatch = createDispatchHandler(dispatch, action);
if (_default2(Array, enhancers)) {
var isPatternMatch = _default3(_default4, action.type);
enhancers.forEach(function (_ref) {
var pred = _ref[0],
en = _ref[1];
if (_default2(RegExp, pred) && isPatternMatch(pred) || _default2(String, pred) && pred === action.type || _default2(Function, pred) && pred(action)) {
try {
var nextAction = en(action);
handleDispatch(nextAction);
} catch (error) {
logger.error('Unable to enhance action: "' + action.type + '"', error);
}
}
});
} else if (isPlainObj(enhancers)) {
var enhance = enhancers[action.type];
if (_default2(Function, enhance)) {
try {
var nextAction = enhance(action);
return handleDispatch(nextAction);
} catch (error) {
logger.error('Unable to enhance action: "' + action.type + '"', error);
}
}
}
return action;
});