redux-duck
Version:
Helper function to create Redux modules using the ducks-modular-redux proposal.
77 lines (61 loc) • 1.67 kB
JavaScript
;
var defaultAction = {
type: '@@INVALID'
};
function validateCases(cases) {
if (cases.length === 0) {
throw new Error('You should pass at least one case name when creating a reducer.');
}
var validCases = cases.filter(function (caseName) {
return caseName !== 'undefined';
});
if (validCases.length === 0) {
throw new Error('All of your action types are undefined.');
}
if (validCases.length !== Object.keys(cases).length) {
throw new Error("One or more of your action types are undefined. Valid cases are: " + validCases.join(', ') + ".");
}
}
function createDuck(name, app) {
function defineType(type) {
if (app) {
return app + "/" + name + "/" + type;
}
return name + "/" + type;
}
function createReducer(cases, defaultState) {
validateCases(Object.keys(cases));
return function reducer(state, action) {
if (state === void 0) {
state = defaultState;
}
if (action === void 0) {
action = defaultAction;
}
for (var caseName in cases) {
if (action.type === caseName) return cases[caseName](state, action);
}
return state;
};
}
function createAction(type, isError) {
if (isError === void 0) {
isError = false;
}
return function actionCreator(payload, meta) {
return {
type: type,
payload: payload,
error: isError,
meta: meta
};
};
}
return {
defineType: defineType,
createReducer: createReducer,
createAction: createAction
};
}
exports.createDuck = createDuck;
//# sourceMappingURL=redux-duck.cjs.development.js.map