accounts-frontend/packages/app/storeFactory.ts

35 lines
1.5 KiB
TypeScript
Raw Normal View History

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