Add migrations for the store

This commit is contained in:
Lei Nelissen
2022-01-03 09:07:30 +01:00
parent 9bf20b1762
commit 56971a9291
3 changed files with 27 additions and 9 deletions

View File

@@ -7,7 +7,7 @@ interface State {
ids: EntityId[]; ids: EntityId[];
} }
const initialState: State = { export const initialState: State = {
entities: {}, entities: {},
ids: [], ids: [],
}; };

View File

@@ -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,
), ),
}); });

View File

@@ -35,7 +35,7 @@ export interface State {
} }
} }
const initialState: State = { export const initialState: State = {
albums: { albums: {
...albumAdapter.getInitialState(), ...albumAdapter.getInitialState(),
isLoading: false, isLoading: false,