83 lines
1.8 KiB
TypeScript
83 lines
1.8 KiB
TypeScript
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<typeof settingsReducer>;
|
|
memes: ReturnType<typeof memesReducer>;
|
|
tags: ReturnType<typeof tagsReducer>;
|
|
navigation: ReturnType<typeof navigationReducer>;
|
|
}
|
|
|
|
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';
|