reducers-creator
Version:
Reducers Creator is an awesome tiny javascript package that allows you to easily and intuitively create reducer functions. Mainly used to create redux reducers.
47 lines (39 loc) • 1.43 kB
JavaScript
;
/**
* Copyright (c) 2020-present Ruben Arushanyan (https://github.com/ruben-arushanyan)
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
var _require = require('immer'),
produce = _require.produce;
var _require2 = require('./utils'),
isString = _require2.isString,
isUndefined = _require2.isUndefined,
isObject = _require2.isObject;
var reducerTreeParser = require('./reducerTreeParser');
var reducersCreator = function reducersCreator(reducer_name, initial_state, reducer_tree) {
if (!isString(reducer_name)) {
throw new TypeError('reducer name must be the String');
}
var reducerHandlers = reducerTreeParser(reducer_tree, reducer_name);
return function () {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initial_state;
var action = arguments.length > 1 ? arguments[1] : undefined;
action = isObject(action) ? action : {};
var type = String(action.type);
if (reducerHandlers.hasOwnProperty(type)) {
var reducerHandler = reducerHandlers[type];
return produce(state, function (draftState) {
var returnedValue = reducerHandler(draftState, action);
if (!isUndefined(returnedValue)) {
return returnedValue;
}
});
} else {
return state;
}
};
};
module.exports = reducersCreator;