import { configureStore, createSlice, combineReducers, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit';
import { persistStore, persistReducer } from 'redux-persist';
import AsyncStorage from '@react-native-async-storage/async-storage';
import thunk from 'redux-thunk';
import logger from 'redux-logger';
import { fetchProfileDetails } from './userActions';
interface PersistState {
darkMode: boolean;
}
const persistInitialState: PersistState = {
darkMode: false,
};
const persistSlice = createSlice({
name: 'persist',
initialState: persistInitialState,
reducers: {
updateDarkMode: (state, action: PayloadAction<boolean>) => {
state.darkMode = action.payload;
},
resetPersist: () => persistInitialState,
},
});
interface UserState {
profileDetails: object;
}
const initialUserState: UserState = {
profileDetails: {},
};
const userSlice = createSlice({
name: 'goLongUser',
initialState: initialUserState,
reducers: {
resetUser: () => initialUserState,
addProfileDetails: (state, action: PayloadAction<object>) => {
state.profileDetails = action.payload;
},
},
extraReducers: (builder) => {
builder.addCase(fetchProfileDetails.fulfilled, (state, action) => {
state.profileDetails = action.payload;
}).addCase(fetchProfileDetails.rejected, (state, action) => {
});
},
});
const persistConfig = {
key: 'root',
storage: AsyncStorage,
whitelist: ['persist'],
};
const rootReducer = combineReducers({
persist: persistReducer(persistConfig, persistSlice.reducer),
user: userSlice.reducer,
});
const store = configureStore({
reducer: rootReducer,
middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(thunk, logger),
});
const persistor = persistStore(store);
export { store, persistor };