redux-modules
Version:
A library for defining clear, boilerplate free Redux reducers.
65 lines (47 loc) • 1.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _mapValues2 = require('lodash/mapValues');
var _mapValues3 = _interopRequireDefault(_mapValues2);
var _get2 = require('lodash/get');
var _get3 = _interopRequireDefault(_get2);
exports.default = connectModule;
var _connectModules = require('./connectModules');
var _connectModules2 = _interopRequireDefault(_connectModules);
var _toObject = require('../utils/toObject');
var _toObject2 = _interopRequireDefault(_toObject);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getSelector(module) {
return (0, _get3.default)(module, 'selector', function () {
return Object.create(null);
});
}
function createModuleSelector(modules) {
if (!Array.isArray(modules)) {
return getSelector(modules);
}
if (modules.length === 1) {
return getSelector(modules[0]);
}
var selectorMap = (0, _toObject2.default)(modules, 'name', getSelector);
return function moduleSelector(state, props) {
return (0, _mapValues3.default)(selectorMap, function (selector) {
return selector(state, props);
});
};
}
function connectModule() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (args.length === 1) {
var _module = args[0];
var formattedSelector = createModuleSelector(_module);
return connectModule(formattedSelector, _module);
}
var selector = args[0],
module = args[1];
var formattedModules = Array.isArray(module) ? module : [module];
return (0, _connectModules2.default)(selector, formattedModules);
}