UNPKG

redux-contexts

Version:

[![NPM Version](https://img.shields.io/npm/v/redux-contexts.svg?style=flat-square)](https://www.npmjs.com/package/multireducer) [![Build status](https://img.shields.io/travis/Vinnovera/redux-contexts/master.svg?style=flat-square)](https://travis-ci.org/Vi

91 lines (72 loc) 3.09 kB
'use strict'; 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)); };