Add migrations for the store
This commit is contained in:
@@ -7,7 +7,7 @@ interface State {
|
|||||||
ids: EntityId[];
|
ids: EntityId[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const initialState: State = {
|
export const initialState: State = {
|
||||||
entities: {},
|
entities: {},
|
||||||
ids: [],
|
ids: [],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,19 +1,32 @@
|
|||||||
import { configureStore, getDefaultMiddleware, combineReducers } from '@reduxjs/toolkit';
|
import { configureStore, getDefaultMiddleware, combineReducers } from '@reduxjs/toolkit';
|
||||||
import { useSelector, TypedUseSelectorHook, useDispatch } from 'react-redux';
|
import { useSelector, TypedUseSelectorHook, useDispatch } from 'react-redux';
|
||||||
import AsyncStorage from '@react-native-community/async-storage';
|
import AsyncStorage from '@react-native-community/async-storage';
|
||||||
import { persistStore, persistReducer, PersistConfig } from 'redux-persist';
|
import { persistStore, persistReducer, PersistConfig, createMigrate } from 'redux-persist';
|
||||||
import autoMergeLevel2 from 'redux-persist/es/stateReconciler/autoMergeLevel2';
|
import autoMergeLevel2 from 'redux-persist/es/stateReconciler/autoMergeLevel2';
|
||||||
|
|
||||||
|
import settings from './settings';
|
||||||
|
import music, { initialState as musicInitialState } from './music';
|
||||||
|
import downloads, { initialState as downloadsInitialState } from './downloads';
|
||||||
|
import { PersistState } from 'redux-persist/es/types';
|
||||||
|
|
||||||
const persistConfig: PersistConfig<AppState> = {
|
const persistConfig: PersistConfig<AppState> = {
|
||||||
key: 'root',
|
key: 'root',
|
||||||
storage: AsyncStorage,
|
storage: AsyncStorage,
|
||||||
stateReconciler: autoMergeLevel2
|
version: 1,
|
||||||
|
stateReconciler: autoMergeLevel2,
|
||||||
|
migrate: createMigrate({
|
||||||
|
// @ts-expect-error migrations are poorly typed
|
||||||
|
1: (state: AppState & PersistState) => {
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
settings: state.settings,
|
||||||
|
downloads: downloadsInitialState,
|
||||||
|
music: musicInitialState
|
||||||
|
};
|
||||||
|
}
|
||||||
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
import settings from './settings';
|
|
||||||
import music from './music';
|
|
||||||
import downloads from './downloads';
|
|
||||||
|
|
||||||
const reducers = combineReducers({
|
const reducers = combineReducers({
|
||||||
settings,
|
settings,
|
||||||
music: music.reducer,
|
music: music.reducer,
|
||||||
@@ -22,11 +35,16 @@ const reducers = combineReducers({
|
|||||||
|
|
||||||
const persistedReducer = persistReducer(persistConfig, reducers);
|
const persistedReducer = persistReducer(persistConfig, reducers);
|
||||||
|
|
||||||
|
const middlewares = [];
|
||||||
|
if (__DEV__) {
|
||||||
|
middlewares.push(require('redux-flipper').default());
|
||||||
|
}
|
||||||
|
|
||||||
const store = configureStore({
|
const store = configureStore({
|
||||||
reducer: persistedReducer,
|
reducer: persistedReducer,
|
||||||
middleware: getDefaultMiddleware({ serializableCheck: false, immutableCheck: false }).concat(
|
middleware: getDefaultMiddleware({ serializableCheck: false, immutableCheck: false }).concat(
|
||||||
// logger,
|
// logger,
|
||||||
__DEV__ ? require('redux-flipper').default() : undefined,
|
...middlewares,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export interface State {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const initialState: State = {
|
export const initialState: State = {
|
||||||
albums: {
|
albums: {
|
||||||
...albumAdapter.getInitialState(),
|
...albumAdapter.getInitialState(),
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
|
|||||||
Reference in New Issue
Block a user