import { configureStore } from '@reduxjs/toolkit'; import { rootReducer } from '../reducers'; import { loadingBarMiddleware } from './middlewares/loading_bar'; import { errorsMiddleware } from './middlewares/errors'; import { soundsMiddleware } from './middlewares/sounds'; import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'; export const store = configureStore({ reducer: rootReducer, middleware: getDefaultMiddleware => getDefaultMiddleware().concat( loadingBarMiddleware({ promiseTypeSuffixes: ['REQUEST', 'SUCCESS', 'FAIL'] })) .concat(errorsMiddleware) .concat(soundsMiddleware()), }); // Infer the `RootState` and `AppDispatch` types from the store itself export type RootState = ReturnType // Inferred type: {posts: PostsState, comments: CommentsState, users: UsersState} export type AppDispatch = typeof store.dispatch export const useAppDispatch: () => AppDispatch = useDispatch; export const useAppSelector: TypedUseSelectorHook = useSelector;