-
-
Notifications
You must be signed in to change notification settings - Fork 109
/
Copy pathstore.ts
48 lines (41 loc) · 1.45 KB
/
store.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { configureStore, getDefaultMiddleware, Action } from "@reduxjs/toolkit";
import { createBrowserHistory } from "history";
import { routerMiddleware } from "connected-react-router";
import { createLogger } from "redux-logger";
import { ThunkAction } from "redux-thunk";
// eslint-disable-next-line import/no-cycle
import createRootReducer from "./rootReducer";
export const history = createBrowserHistory();
const rootReducer = createRootReducer(history);
export type RootState = ReturnType<typeof rootReducer>;
const router = routerMiddleware(history);
const middleware = [...getDefaultMiddleware(), router];
const excludeLoggerEnvs = ["test", "production"];
const shouldIncludeLogger = !excludeLoggerEnvs.includes(
process.env.NODE_ENV || ""
);
if (shouldIncludeLogger) {
const logger = createLogger({
level: "info",
collapsed: true,
});
middleware.push(logger);
}
export const configuredStore = (initialState?: RootState) => {
// Create Store
const store = configureStore({
reducer: rootReducer,
middleware,
preloadedState: initialState,
});
if (process.env.NODE_ENV === "development" && module.hot) {
module.hot.accept(
"./rootReducer",
// eslint-disable-next-line global-require
() => store.replaceReducer(require("./rootReducer").default)
);
}
return store;
};
export type Store = ReturnType<typeof configuredStore>;
export type AppThunk = ThunkAction<void, RootState, unknown, Action<string>>;