mirrorx
Version:
A React framework with minimal API and zero boilerplate.
60 lines (48 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.addActions = addActions;
exports.resolveReducers = resolveReducers;
exports.actions = void 0;
var _middleware = require("./middleware");
var _defaults = require("./defaults");
var SEP = '/';
var actions = {};
exports.actions = 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 \"".concat(effectName, "\" has been used! Please select another name as effect name!"));
}
_defaults.options.addEffect("".concat(modelName).concat(SEP).concat(effectName), effects[effectName]);
actions[modelName][effectName] = actionCreator(modelName, effectName);
actions[modelName][effectName].isEffect = true;
});
}
function resolveReducers(modelName) {
var reducers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return Object.keys(reducers).reduce(function (acc, cur) {
acc["".concat(modelName).concat(SEP).concat(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: "".concat(modelName).concat(SEP).concat(actionName),
data: data
});
};
}