import { configureStore, combineReducers } from '@reduxjs/toolkit'; import { persistReducer, persistStore, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER, } from 'redux-persist'; import { createRealmPersistStorage } from '@bankify/redux-persist-realm'; import settingsReducer from './settings'; import memesReducer from './memes'; import tagsReducer from './tags'; import navigationReducer from './navigation'; const rootReducer = combineReducers({ settings: settingsReducer, memes: memesReducer, tags: tagsReducer, navigation: navigationReducer, }); interface RootState { settings: ReturnType; memes: ReturnType; tags: ReturnType; navigation: ReturnType; } const persistConfig = { key: 'root', storage: createRealmPersistStorage({ path: 'redux.realm' }), blacklist: ['navigation'], }; const persistedReducer = persistReducer(persistConfig, rootReducer); const store = configureStore({ reducer: persistedReducer, middleware: getDefaultMiddleware => getDefaultMiddleware({ serializableCheck: { ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER], }, }), }); const persistor = persistStore(store); export { type RootState, store, persistor }; export { type SettingsState, setStorageUri, setNoMedia, setMasonryColumns, setGridColumns, validateSettings, } from './settings'; export { type MemesState, setMemesSort, setMemesSortDirection, toggleMemesSortDirection, setMemesView, cycleMemesView, setMemesFavoritesOnly, toggleMemesFavoritesOnly, setMemesFilter, } from './memes'; export { type TagsState, setTagsSort, setTagsSortDirection, toggleTagsSortDirection, } from './tags'; export { type NavigationState, setNavVisible, toggleNavVisible, } from './navigation';