import {
|
|
combineReducers,
|
|
configureStore,
|
|
ThunkAction,
|
|
Action,
|
|
} from "@reduxjs/toolkit";
|
|
|
|
import counterReducer from "features/counter/counterSlice";
|
|
import { loginSocketMessageMiddleware } from "modules/login/message";
|
|
import loginReducer from "modules/login/slice";
|
|
import { roomSocketMessageMiddleware } from "modules/room/message";
|
|
import roomReducer from "modules/room/slice";
|
|
import makeSocketMiddleware from "modules/socket/middleware";
|
|
import socketReducer from "modules/socket/slice";
|
|
import userReducer from "modules/user/slice";
|
|
|
|
const rootReducer = combineReducers({
|
|
counter: counterReducer,
|
|
login: loginReducer,
|
|
rooms: roomReducer,
|
|
socket: socketReducer,
|
|
users: userReducer,
|
|
});
|
|
|
|
// 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,
|
|
roomSocketMessageMiddleware,
|
|
])
|
|
),
|
|
});
|
|
|
|
export type AppDispatch = typeof store.dispatch;
|
|
export type AppThunk<ReturnType = void> = ThunkAction<
|
|
ReturnType,
|
|
RootState,
|
|
unknown,
|
|
Action<string>
|
|
>;
|