1234567891011121314151617181920212223242526272829303132333435 |
- import invariant from 'invariant'
- import { isEmpty, isFunction, isString } from 'lodash'
- import checkStore from './checkStore'
- import createReducer from '../reducers'
- export function injectReducerFactory (store, isValid) {
- return function injectReducer (key, reducer) {
- if (!isValid) { checkStore(store) }
- invariant(
- isString(key) && !isEmpty(key) && isFunction(reducer),
- '(app/utils...) injectReducer: Expected `reducer` to be a reducer function'
- )
- // Check `store.injectedReducers[key] === reducer` for hot reloading when a key is the same but a reducer is different
- if (
- Reflect.has(store.injectedReducers, key) &&
- store.injectedReducers[key] === reducer
- ) {
- return
- }
- store.injectedReducers[key] = reducer // eslint-disable-line no-param-reassign
- store.replaceReducer(createReducer(store.injectedReducers))
- }
- }
- export default function getInjectors (store) {
- checkStore(store)
- return {
- injectReducer: injectReducerFactory(store, true)
- }
- }
|