import {
|
|
combineReducers,
|
|
configureStore,
|
|
ThunkAction,
|
|
Action,
|
|
} from "@reduxjs/toolkit";
|
|
|
|
import counterReducer from "../features/counter/counterSlice";
|
|
// TODO: Rework these to use a slice, otherwise redux complains about
|
|
// non-serializable Immutable.js types.
|
|
//
|
|
// import rooms from "../reducers/rooms";
|
|
// import users from "../reducers/users";
|
|
//
|
|
import { loginSocketMessageMiddleware } from "../modules/login/message";
|
|
import loginReducer from "../modules/login/slice";
|
|
import roomReducer from "../modules/room/slice";
|
|
import makeSocketMiddleware from "../modules/websocket/middleware";
|
|
import socketReducer from "../modules/websocket/slice";
|
|
|
|
const rootReducer = combineReducers({
|
|
counter: counterReducer,
|
|
login: loginReducer,
|
|
rooms: roomReducer,
|
|
socket: socketReducer,
|
|
//users,
|
|
});
|
|
|
|
// Define this before defining `store`, to break a circular type reference:
|
|
//
|
|
// store -> middleware -> RootState
|
|
//
|
|
export type RootState = ReturnType<typeof rootReducer>;
|
|
|
|
export const store = configureStore({
|
|
reducer: rootReducer,
|
|
middleware: (getDefaultMiddleware) =>
|
|
getDefaultMiddleware().concat(
|
|
makeSocketMiddleware([loginSocketMessageMiddleware])
|
|
),
|
|
});
|
|
|
|
export type AppDispatch = typeof store.dispatch;
|
|
export type AppThunk<ReturnType = void> = ThunkAction<
|
|
ReturnType,
|
|
RootState,
|
|
unknown,
|
|
Action<string>
|
|
>;
|