mirrorx-persist
Version:
A React framework with minimal API and zero boilerplate.
62 lines (46 loc) • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.actions = undefined;
exports.addActions = addActions;
exports.resolveReducers = resolveReducers;
var _middleware = require('./middleware');
var _defaults = require('./defaults');
var SEP = '/';
var actions = exports.actions = {};
function addActions(modelName) {
var reducers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var effects = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
if (Object.keys(reducers).length || Object.keys(effects).length) {
actions[modelName] = actions[modelName] || {};
}
each(reducers, function (actionName) {
actions[modelName][actionName] = actionCreator(modelName, actionName);
});
each(effects, function (effectName) {
if (actions[modelName][effectName]) {
throw new Error('Action name "' + effectName + '" has been used! Please select another name as effect name!');
}
_defaults.options.addEffect('' + modelName + SEP + effectName, effects[effectName]);
actions[modelName][effectName] = actionCreator(modelName, effectName);
});
}
function resolveReducers(modelName) {
var reducers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return Object.keys(reducers).reduce(function (acc, cur) {
acc['' + modelName + SEP + cur] = reducers[cur];
return acc;
}, {});
}
function each(obj, callback) {
Object.keys(obj).forEach(callback);
}
function actionCreator(modelName, actionName) {
return function (data) {
return (0, _middleware.dispatch)({
type: '' + modelName + SEP + actionName,
data: data
});
};
}