mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-03-08 22:00:25 -04:00
47 lines
1.3 KiB
JavaScript
47 lines
1.3 KiB
JavaScript
/* eslint-disable-next-line max-len */
|
|
import { composeWithDevTools } from 'redux-devtools-extension/logOnlyInProduction';
|
|
import { createStore as reduxCreateStore, applyMiddleware } from 'redux';
|
|
import createSagaMiddleware from 'redux-saga';
|
|
import { createEpicMiddleware } from 'redux-observable';
|
|
|
|
import rootEpic from './rootEpic';
|
|
import rootReducer from './rootReducer';
|
|
import rootSaga from './rootSaga';
|
|
import { isBrowser } from '../../utils';
|
|
|
|
const clientSide = isBrowser();
|
|
|
|
const sagaMiddleware = createSagaMiddleware({
|
|
context: {
|
|
document: clientSide ? document : {}
|
|
}
|
|
});
|
|
const epicMiddleware = createEpicMiddleware({
|
|
dependencies: {
|
|
window: clientSide ? window : {},
|
|
location: clientSide ? window.location : {},
|
|
document: clientSide ? document : {}
|
|
}
|
|
});
|
|
|
|
const composeEnhancers = composeWithDevTools({
|
|
// options like actionSanitizer, stateSanitizer
|
|
});
|
|
|
|
export const createStore = () => {
|
|
const store = reduxCreateStore(
|
|
rootReducer,
|
|
composeEnhancers(applyMiddleware(sagaMiddleware, epicMiddleware))
|
|
);
|
|
sagaMiddleware.run(rootSaga);
|
|
epicMiddleware.run(rootEpic);
|
|
if (module.hot) {
|
|
// Enable Webpack hot module replacement for reducers
|
|
module.hot.accept('./rootReducer', () => {
|
|
const nextRootReducer = require('./rootReducer');
|
|
store.replaceReducer(nextRootReducer);
|
|
});
|
|
}
|
|
return store;
|
|
};
|