zcash-grant-system/frontend/client/store/configure.tsx

48 lines
1.4 KiB
TypeScript
Raw Normal View History

2018-09-10 09:55:26 -07:00
import { Store, createStore, applyMiddleware } from 'redux';
import createSagaMiddleware, { SagaMiddleware } from 'redux-saga';
import thunkMiddleware, { ThunkMiddleware } from 'redux-thunk';
import promiseMiddleware from 'redux-promise-middleware';
2018-09-13 16:42:49 -07:00
import { composeWithDevTools } from 'redux-devtools-extension';
import rootReducer, { AppState, combineInitialState } from './reducers';
2018-09-10 09:55:26 -07:00
// import rootSaga from './sagas';
const sagaMiddleware = createSagaMiddleware();
type MiddleWare = ThunkMiddleware | SagaMiddleware<any> | any;
const bindMiddleware = (middleware: MiddleWare[]) => {
if (process.env.NODE_ENV !== 'production') {
const { createLogger } = require('redux-logger');
const logger = createLogger({
collapsed: true,
});
2018-09-13 16:42:49 -07:00
middleware = [...middleware, logger];
2018-09-10 09:55:26 -07:00
}
2018-09-13 16:42:49 -07:00
return composeWithDevTools(applyMiddleware(...middleware));
2018-09-10 09:55:26 -07:00
};
export function configureStore(
initialState: Partial<AppState> = combineInitialState,
): Store {
const store: Store<AppState> = createStore(
2018-09-10 09:55:26 -07:00
rootReducer,
initialState,
bindMiddleware([sagaMiddleware, thunkMiddleware, promiseMiddleware()]),
);
// store.runSagaTask = () => {
// store.sagaTask = sagaMiddleware.run(rootSaga);
// };
// store.runSagaTask();
if (process.env.NODE_ENV === 'development') {
if (module.hot) {
module.hot.accept('./reducers', () =>
store.replaceReducer(require('./reducers').default),
);
}
}
2018-09-10 09:55:26 -07:00
return store;
}