store.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';
  2. import {
  3. configureStore,
  4. createListenerMiddleware,
  5. TypedStartListening,
  6. TypedAddListener,
  7. ListenerEffectAPI,
  8. addListener,
  9. } from '@reduxjs/toolkit';
  10. import { pagesSlice } from './reducers/pages/slice';
  11. import { currentUserSlice } from './reducers/current-user/slice';
  12. import { workspaceSlice } from './reducers/workspace/slice';
  13. import { databaseSlice } from './reducers/database/slice';
  14. import { documentReducers } from './reducers/document/slice';
  15. import { boardSlice } from './reducers/board/slice';
  16. import { errorSlice } from './reducers/error/slice';
  17. import { sidebarSlice } from '$app_reducers/sidebar/slice';
  18. import { blockDraggableSlice } from '$app_reducers/block-draggable/slice';
  19. import { trashSlice } from '$app_reducers/trash/slice';
  20. const listenerMiddlewareInstance = createListenerMiddleware({
  21. onError: () => console.error,
  22. });
  23. const store = configureStore({
  24. reducer: {
  25. [pagesSlice.name]: pagesSlice.reducer,
  26. [currentUserSlice.name]: currentUserSlice.reducer,
  27. [databaseSlice.name]: databaseSlice.reducer,
  28. [boardSlice.name]: boardSlice.reducer,
  29. [workspaceSlice.name]: workspaceSlice.reducer,
  30. [errorSlice.name]: errorSlice.reducer,
  31. [sidebarSlice.name]: sidebarSlice.reducer,
  32. [blockDraggableSlice.name]: blockDraggableSlice.reducer,
  33. [trashSlice.name]: trashSlice.reducer,
  34. ...documentReducers,
  35. },
  36. middleware: (gDM) => gDM({ serializableCheck: false }).prepend(listenerMiddlewareInstance.middleware),
  37. });
  38. export { store };
  39. // Infer the `RootState` and `AppDispatch` types from the store itself
  40. export type RootState = ReturnType<typeof store.getState>;
  41. // @see https://redux-toolkit.js.org/usage/usage-with-typescript#getting-the-dispatch-type
  42. export type AppDispatch = typeof store.dispatch;
  43. export type AppListenerEffectAPI = ListenerEffectAPI<RootState, AppDispatch>;
  44. // @see https://redux-toolkit.js.org/api/createListenerMiddleware#typescript-usage
  45. export type AppStartListening = TypedStartListening<RootState, AppDispatch>;
  46. export type AppAddListener = TypedAddListener<RootState, AppDispatch>;
  47. export const startAppListening = listenerMiddlewareInstance.startListening as AppStartListening;
  48. export const addAppListener = addListener as AppAddListener;
  49. // Use throughout your app instead of plain `useDispatch` and `useSelector`
  50. export const useAppDispatch = () => useDispatch<AppDispatch>();
  51. export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;