accounts-frontend/src/storeFactory.js

45 lines
1.5 KiB
JavaScript
Raw Normal View History

// @flow
2016-06-18 20:30:45 +05:30
import { createStore, applyMiddleware, compose } from 'redux';
// midleware, который позволяет возвращать из экшенов функции
// это полезно для работы с асинхронными действиями,
// а также дает возможность проверить какие-либо условия перед запуском экшена
// или даже вообще его не запускать в зависимости от условий
import thunk from 'redux-thunk';
import persistState from 'redux-localstorage';
2016-06-18 20:30:45 +05:30
import reducers from 'reducers';
export default function storeFactory() {
const middlewares = applyMiddleware(
thunk
);
const persistStateEnhancer = persistState([
2016-11-05 15:41:41 +05:30
'accounts',
'user'
], {key: 'redux-storage'});
2016-06-18 20:30:45 +05:30
/* global process: false */
let enhancer;
if (process.env.NODE_ENV === 'production') {
enhancer = compose(middlewares, persistStateEnhancer);
2016-06-18 20:30:45 +05:30
} else {
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
enhancer = composeEnhancers(
middlewares,
persistStateEnhancer
);
2016-06-18 20:30:45 +05:30
}
const store = createStore(reducers, {}, enhancer);
// Hot reload reducers
// $FlowFixMe
if (module.hot && typeof module.hot.accept === 'function') {
2016-06-18 20:30:45 +05:30
module.hot.accept('reducers', () =>
store.replaceReducer(require('reducers').default)
);
}
return store;
}