veza/veza-mobile/src/store/store.ts

45 lines
No EOL
1.4 KiB
TypeScript

import { configureStore } from '@reduxjs/toolkit';
import { persistStore, persistReducer } from 'redux-persist';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER } from 'redux-persist';
// Reducers
import authReducer from './slices/authSlice';
import featuresReducer from './slices/featuresSlice';
import analyticsReducer from './slices/analyticsSlice';
import mediaReducer from './slices/mediaSlice';
import chatReducer from './slices/chatSlice';
import uiReducer from './slices/uiSlice';
import offlineReducer from './slices/offlineSlice';
// Configuration persist
const persistConfig = {
key: 'root',
storage: AsyncStorage,
whitelist: ['auth', 'offline'], // Only persist auth and offline data
};
const persistedReducer = persistReducer(persistConfig, authReducer);
export const store = configureStore({
reducer: {
auth: persistedReducer,
features: featuresReducer,
analytics: analyticsReducer,
media: mediaReducer,
chat: chatReducer,
ui: uiReducer,
offline: offlineReducer,
},
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware({
serializableCheck: {
ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
},
}),
});
export const persistor = persistStore(store);
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;