diff --git a/app/utils/reducerInjectors.js b/app/utils/reducerInjectors.js index a929a6b..9951e55 100644 --- a/app/utils/reducerInjectors.js +++ b/app/utils/reducerInjectors.js @@ -1,12 +1,14 @@ import invariant from 'invariant'; -import { isEmpty, isFunction, isString } from 'lodash'; +import { isEmpty, isFunction, isString, has } from 'lodash'; import checkStore from './checkStore'; import createReducer from '../reducers'; export function injectReducerFactory(store, isValid) { return function injectReducer(key, reducer) { - if (!isValid) checkStore(store); + if (!isValid) { + checkStore(store); + } invariant( isString(key) && !isEmpty(key) && isFunction(reducer), @@ -14,8 +16,9 @@ export function injectReducerFactory(store, isValid) { ); // Check `store.injectedReducers[key] === reducer` for hot reloading when a key is the same but a reducer is different + // eslint-disable-next-line prettier/prettier if ( - Reflect.has(store.injectedReducers, key) && + has(store.injectedReducers, key) && store.injectedReducers[key] === reducer ) return; diff --git a/app/utils/sagaInjectors.js b/app/utils/sagaInjectors.js index 15f4f10..19124ab 100644 --- a/app/utils/sagaInjectors.js +++ b/app/utils/sagaInjectors.js @@ -1,5 +1,5 @@ import invariant from 'invariant'; -import { isEmpty, isFunction, isString, conformsTo } from 'lodash'; +import { isEmpty, isFunction, isString, conformsTo, has } from 'lodash'; import checkStore from './checkStore'; import { DAEMON, ONCE_TILL_UNMOUNT, RESTART_ON_REMOUNT } from './constants'; @@ -7,75 +7,47 @@ import { DAEMON, ONCE_TILL_UNMOUNT, RESTART_ON_REMOUNT } from './constants'; const allowedModes = [RESTART_ON_REMOUNT, DAEMON, ONCE_TILL_UNMOUNT]; const checkKey = key => - invariant( - isString(key) && !isEmpty(key), - '(app/utils...) injectSaga: Expected `key` to be a non empty string', - ); + invariant(isString(key) && !isEmpty(key), '(app/utils...) injectSaga: Expected `key` to be a non empty string'); const checkDescriptor = descriptor => { const shape = { saga: isFunction, mode: mode => isString(mode) && allowedModes.includes(mode), }; - invariant( - conformsTo(descriptor, shape), - '(app/utils...) injectSaga: Expected a valid saga descriptor', - ); + invariant(conformsTo(descriptor, shape), '(app/utils...) injectSaga: Expected a valid saga descriptor'); }; export function injectSagaFactory(store, isValid) { return function injectSaga(key, descriptor = {}, args) { - if (!isValid) checkStore(store); + if (!isValid) { + checkStore(store); + } - const newDescriptor = { - ...descriptor, - mode: descriptor.mode || DAEMON, - }; - const { saga, mode } = newDescriptor; + const newDescriptor = { ...descriptor, mode: descriptor.mode || DAEMON }; + const { saga } = newDescriptor; checkKey(key); checkDescriptor(newDescriptor); - let hasSaga = Reflect.has(store.injectedSagas, key); + let hasSaga = has(store.injectedSagas, key); - if (process.env.NODE_ENV !== 'production') { - const oldDescriptor = store.injectedSagas[key]; - // enable hot reloading of daemon and once-till-unmount sagas - if (hasSaga && oldDescriptor.saga !== saga) { - oldDescriptor.task.cancel(); - hasSaga = false; - } - } - - if ( - !hasSaga || - (hasSaga && mode !== DAEMON && mode !== ONCE_TILL_UNMOUNT) - ) { - /* eslint-disable no-param-reassign */ - store.injectedSagas[key] = { - ...newDescriptor, - task: store.runSaga(saga, args), - }; - /* eslint-enable no-param-reassign */ + if (!hasSaga) { + store.injectedSagas[key] = { ...newDescriptor, task: store.runSaga(saga, args) }; // eslint-disable-line no-param-reassign } }; } export function ejectSagaFactory(store, isValid) { return function ejectSaga(key) { - if (!isValid) checkStore(store); + if (!isValid) { + checkStore(store); + } checkKey(key); - if (Reflect.has(store.injectedSagas, key)) { + if (has(store.injectedSagas, key)) { const descriptor = store.injectedSagas[key]; if (descriptor.mode && descriptor.mode !== DAEMON) { - descriptor.task.cancel(); - // Clean up in production; in development we need `descriptor.saga` for hot reloading - if (process.env.NODE_ENV === 'production') { - // Need some value to be able to detect `ONCE_TILL_UNMOUNT` sagas in `injectSaga` - store.injectedSagas[key] = 'done'; // eslint-disable-line no-param-reassign - } } } };