redux-contexts
Version:
[](https://www.npmjs.com/package/multireducer) [](https://travis-ci.org/Vi
91 lines (72 loc) • 3.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.removeReducer = exports.injectReducer = exports.createInjectStore = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _redux = require('redux');
var _lodash = require('lodash');
var store = {};
var combine = _redux.combineReducers;
var combineReducersRecurse = function combineReducersRecurse(reducers) {
// If this is a leaf or already combined.
if (typeof reducers === 'function') {
return reducers;
}
// If this is an object of functions, combine reducers.
if ((typeof reducers === 'undefined' ? 'undefined' : _typeof(reducers)) === 'object') {
var combinedReducers = {};
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = Object.keys(reducers)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var key = _step.value;
combinedReducers[key] = combineReducersRecurse(reducers[key]);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return combine(combinedReducers);
}
// If we get here we have an invalid item in the reducer path.
throw new Error({
message: 'Invalid item in reducer tree',
item: reducers
});
};
var createInjectStore = exports.createInjectStore = function createInjectStore(initialReducers) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
store = _redux.createStore.apply(undefined, [combineReducersRecurse(initialReducers)].concat(args));
store.injectedReducers = initialReducers;
return store;
};
var injectReducer = exports.injectReducer = function injectReducer(key, reducer) {
var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
// If already set, do nothing.
if ((0, _lodash.has)(store.injectedReducers, key) || force) return;
(0, _lodash.set)(store.injectedReducers, key, reducer);
store.replaceReducer(combineReducersRecurse(store.injectedReducers));
};
var removeReducer = exports.removeReducer = function removeReducer(key) {
// If not set, do nothing
if (!(0, _lodash.has)(store.injectedReducers, key)) return;
//Remove key from state (hot reload warning if not)
var state = store.getState();
(0, _lodash.unset)(state, key);
(0, _lodash.unset)(store.injectedReducers, key);
store.replaceReducer(combineReducersRecurse(store.injectedReducers));
};