import { AnyAction, combineReducers, configureStore } from '@reduxjs/toolkit' // import { IS_BROWSER } from 'configs' import { createWrapper, HYDRATE } from 'next-redux-wrapper' // import { useMemo } from 'react' // import { persistReducer } from 'redux-persist' // import storage from 'redux-persist/lib/storage' import createSagaMiddleware from 'redux-saga' import { globalSlice } from './global' import { metaDataSlice } from './metaData' import { profileSlice } from './profile' import { stakingPoolSlice } from './stakingPool' import { userSlice } from './user' import rootSaga from './rootSaga' import { SagaStore } from './types' // const persistConfig = { // key: 'horse-verse:primary', // storage, // // whitelist: ['exampleData'], // place to select which state you want to persist // } const combineReducer = combineReducers({ [metaDataSlice.name]: metaDataSlice.reducer, [userSlice.name]: userSlice.reducer, [profileSlice.name]: profileSlice.reducer, [globalSlice.name]: globalSlice.reducer, [stakingPoolSlice.name]: stakingPoolSlice.reducer, }) // const persistedReducer = persistReducer(persistConfig, combineReducer) const rootReducer = (state: ReturnType, action: AnyAction) => { if (action.type === HYDRATE) { const nextState = { ...state, // use previous state ...action.payload, // apply delta from hydration } if (state.metaData.isLoaded) nextState.metaData = state.metaData // preserve count value on client side navigation if (state.user.userData?.accessToken) nextState.user = state.user // preserve count value on client side navigation return nextState } else { return combineReducer(state, action) } } export let store: SagaStore export function makeStore(preloadedState = undefined) { // 1: Create the middleware const sagaMiddleware = createSagaMiddleware() store = configureStore({ // reducer: persistedReducer, reducer: rootReducer, middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: false, }).concat(sagaMiddleware), // devTools: process.env.NODE_ENV !== 'production', preloadedState, }) // 3: Run your sagas on server store.sagaTask = sagaMiddleware.run(rootSaga) // 4: now return the store: return store } makeStore() export const wrapper = createWrapper(makeStore)