68 lines
1.7 KiB
JavaScript
Executable File
68 lines
1.7 KiB
JavaScript
Executable File
import { createStore, applyMiddleware, compose } from 'redux';
|
|
import { createLogger } from 'redux-logger';
|
|
import thunkMiddleware from 'redux-thunk';
|
|
import { Map } from 'immutable';
|
|
|
|
import rootReducer from '../state/reducers';
|
|
import loggerConfig from '../config/logger';
|
|
import { __DEBUG__ } from '../config/constants';
|
|
|
|
const configureStore = () => {
|
|
let initialStoreState = Map();
|
|
|
|
const enhancers = [];
|
|
const middlewares = [
|
|
thunkMiddleware,
|
|
];
|
|
|
|
let devtools;
|
|
|
|
if (__DEBUG__) {
|
|
devtools = (
|
|
typeof window !== 'undefined'
|
|
&& typeof window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ === 'function'
|
|
&& window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ actionsBlacklist: [] })
|
|
);
|
|
|
|
if (devtools) {
|
|
console.info('[setup] ✓ Enabling Redux DevTools Extension');
|
|
}
|
|
|
|
console.info('[setup] ✓ Enabling state logger');
|
|
const loggerMiddleware = createLogger({
|
|
level: 'info',
|
|
collapsed: true,
|
|
stateTransformer: (state) => state.toJS(),
|
|
predicate: (getState, action) => {
|
|
const state = getState();
|
|
|
|
const showBlacklisted = state.getIn(['debug', 'logs', 'blacklisted']);
|
|
if (loggerConfig.blacklist.indexOf(action.type) !== -1 && !showBlacklisted) {
|
|
return false;
|
|
}
|
|
|
|
return state.getIn(['debug', 'logs', 'enabled']);
|
|
},
|
|
});
|
|
middlewares.push(loggerMiddleware);
|
|
}
|
|
|
|
const composedEnhancers = devtools || compose;
|
|
const storeEnhancers = composedEnhancers(
|
|
applyMiddleware(...middlewares),
|
|
...enhancers
|
|
);
|
|
|
|
const store = createStore(
|
|
rootReducer,
|
|
initialStoreState,
|
|
storeEnhancers,
|
|
);
|
|
|
|
return store;
|
|
};
|
|
|
|
export default configureStore;
|
|
|
|
export const store = configureStore();
|