Files
workavia-calendar-front/src/app/store.ts
T
2026-04-24 10:05:42 +02:00

41 lines
1.4 KiB
TypeScript

import eventsCalendar from '@/features/Calendars/CalendarSlice'
import { postMutationRefreshMiddleware } from '@/features/Calendars/listeners/postMutationRefresh'
import searchResultReducer from '@/features/Search/SearchSlice'
import settingsReducer from '@/features/Settings/SettingsSlice'
import userReducer from '@/features/User/userSlice'
import { combineReducers, configureStore } from '@reduxjs/toolkit'
import loadingReducer from './loadingSlice'
import { createBrowserHistory } from 'history'
import { createReduxHistoryContext } from 'redux-first-history'
const { createReduxHistory, routerMiddleware, routerReducer } =
createReduxHistoryContext({ history: createBrowserHistory() })
const rootReducer = combineReducers({
router: routerReducer,
user: userReducer,
calendars: eventsCalendar,
settings: settingsReducer,
searchResult: searchResultReducer,
loading: loadingReducer
})
export const setupStore = (preloadedState?: Partial<RootState>) => {
return configureStore({
reducer: rootReducer,
preloadedState,
middleware: getDefaultMiddleware =>
getDefaultMiddleware()
.concat(routerMiddleware)
.prepend(postMutationRefreshMiddleware.middleware)
})
}
export const store = setupStore()
export const history = createReduxHistory(store)
export type RootState = ReturnType<typeof rootReducer>
export type AppStore = ReturnType<typeof setupStore>
export type AppDispatch = AppStore['dispatch']