WebStudio/src/store.ts

63 lines
1.5 KiB
TypeScript
Raw Normal View History

2020-05-10 12:00:03 +00:00
import raygun from "raygun4js";
2020-09-23 18:13:01 +00:00
import {
configureStore,
Action,
getDefaultMiddleware,
Middleware,
Dispatch,
} from "@reduxjs/toolkit";
2020-05-05 18:41:29 +00:00
import rootReducer, { RootState } from "./rootReducer";
2019-11-26 10:01:26 +00:00
import { ThunkAction } from "redux-thunk";
import {
2020-04-19 13:47:19 +00:00
mixerMiddleware,
2020-04-19 16:33:34 +00:00
mixerKeyboardShortcutsMiddleware,
startNewsTimer,
} from "./mixer/state";
import {
persistStore,
FLUSH,
REHYDRATE,
PAUSE,
PERSIST,
PURGE,
2020-09-23 18:13:01 +00:00
REGISTER,
} from "redux-persist";
2020-09-23 18:13:01 +00:00
const raygunMiddleware: Middleware<{}, RootState, Dispatch<any>> = (store) => (
next
) => (action) => {
raygun("recordBreadcrumb", "redux-action", action);
return next(action);
2020-09-23 18:13:01 +00:00
};
2019-11-26 10:01:26 +00:00
// See https://github.com/rt2zz/redux-persist/issues/988 for getDefaultMiddleware tweak.
2019-11-26 10:01:26 +00:00
const store = configureStore({
2020-04-19 13:47:19 +00:00
reducer: rootReducer,
middleware: [
mixerMiddleware,
mixerKeyboardShortcutsMiddleware,
raygunMiddleware,
...getDefaultMiddleware({
serializableCheck: {
2020-09-23 18:13:01 +00:00
ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
},
}),
2020-04-19 16:33:34 +00:00
],
2019-11-26 10:01:26 +00:00
});
if (process.env.NODE_ENV === "development" && module.hot) {
2020-04-19 13:47:19 +00:00
module.hot.accept("./rootReducer", () => {
const newRootReducer = require("./rootReducer").default;
store.replaceReducer(newRootReducer);
});
2019-11-26 10:01:26 +00:00
}
export const persistor = persistStore(store);
2019-11-26 10:01:26 +00:00
export type AppDispatch = typeof store.dispatch;
export type AppThunk = ThunkAction<void, RootState, null, Action<string>>;
store.dispatch(startNewsTimer() as any);
2019-11-26 10:01:26 +00:00
export default store;