mirror of
https://github.com/Doodle3D/Doodle3D-Transform.git
synced 2024-10-01 15:38:39 +02:00
65 lines
2.0 KiB
JavaScript
65 lines
2.0 KiB
JavaScript
import { createStore, compose, applyMiddleware } from 'redux';
|
|
import thunkMiddleware from 'redux-thunk';
|
|
import promiseMiddleware from 'redux-promise-middleware';
|
|
import { browserHistory, hashHistory } from 'react-router';
|
|
import { routerMiddleware } from 'react-router-redux';
|
|
import createLogger from 'redux-logger';
|
|
import { makePersistantMiddleware } from 'src/js/services/localStore.js';
|
|
import { LOCAL_STORE_READ } from 'src/js/actions/localStore.js';
|
|
import { platform } from 'src/js/constants/envs.js';
|
|
import promptMiddleware from 'redux-prompt/middleware';
|
|
|
|
import debugOverlappingDispatches from './utils/debugOverlappingDispatches.js';
|
|
|
|
import createDebug from 'debug';
|
|
// in dev mode when finds debug key in localStorage
|
|
// (which is also used by debug module)
|
|
const devMode = createDebug.load() !== undefined;
|
|
const debug = createDebug('d3d:store');
|
|
|
|
// create router middleware that handles route actions
|
|
const reduxRouterMiddleware = routerMiddleware(platform === 'ios-app' ? hashHistory : browserHistory);
|
|
|
|
export default function configureStore(reducers, initialState) {
|
|
let store;
|
|
|
|
let middleware = [
|
|
reduxRouterMiddleware,
|
|
thunkMiddleware,
|
|
promiseMiddleware(),
|
|
promptMiddleware(),
|
|
makePersistantMiddleware(state => state.localStore, LOCAL_STORE_READ),
|
|
debugOverlappingDispatches()
|
|
];
|
|
|
|
if (devMode) {
|
|
// add development middleware
|
|
const logger = createLogger({
|
|
predicate: (_, action) => action.log !== false,
|
|
collapsed: true,
|
|
logErrors: false
|
|
});
|
|
middleware = [
|
|
...middleware,
|
|
logger
|
|
];
|
|
}
|
|
store = createStore(
|
|
reducers,
|
|
initialState,
|
|
compose( // compose store enhancers
|
|
applyMiddleware(...middleware)
|
|
)
|
|
);
|
|
|
|
if (module.hot) {
|
|
module.hot.accept('./reducers/index.js', () => {
|
|
const reducer = require('./reducers/index.js').default;
|
|
debug('Reducers changed, replacing reducers of store');
|
|
store.replaceReducer(reducer);
|
|
});
|
|
}
|
|
|
|
return store;
|
|
}
|