Files
freeCodeCamp/packages/learn/src/redux/store.js

48 lines
1.2 KiB
JavaScript
Raw Normal View History

2018-04-06 14:51:52 +01:00
import {
createStore as reduxCreateStore,
combineReducers,
applyMiddleware
} from 'redux';
import { combineEpics, createEpicMiddleware } from 'redux-observable';
import { reducer as formReducer } from 'redux-form';
2018-04-12 16:06:40 +01:00
import { reducer as app, epics as appEpics } from './app';
import {
reducer as challenge,
epics as challengeEpics
} from '../templates/Challenges/redux';
2018-04-06 14:51:52 +01:00
import { reducer as map } from '../components/Map/redux';
2018-05-24 19:45:38 +01:00
import servicesCreator from './createServices';
import { _csrf } from './cookieVaules';
const serviceOptions = {
context: _csrf ? { _csrf } : {},
xhrPath: '/external/services',
xhrTimeout: 15000
};
2018-04-06 14:51:52 +01:00
const rootReducer = combineReducers({
2018-04-11 14:46:46 +01:00
app,
2018-04-06 14:51:52 +01:00
challenge,
form: formReducer,
2018-09-12 15:58:08 +03:00
map
2018-04-06 14:51:52 +01:00
});
const rootEpic = combineEpics(...appEpics, ...challengeEpics);
2018-04-11 14:46:46 +01:00
2018-04-06 14:51:52 +01:00
const epicMiddleware = createEpicMiddleware(rootEpic, {
dependencies: {
window: typeof window !== 'undefined' ? window : {},
location: typeof window !== 'undefined' ? window.location : {},
2018-05-24 19:45:38 +01:00
document: typeof window !== 'undefined' ? document : {},
services: servicesCreator(serviceOptions)
2018-04-06 14:51:52 +01:00
}
});
2018-09-12 15:58:08 +03:00
export const createStore = () =>
2018-04-06 14:51:52 +01:00
reduxCreateStore(
rootReducer,
2018-09-12 15:58:08 +03:00
applyMiddleware(epicMiddleware)
2018-04-06 14:51:52 +01:00
);