diff --git a/src/store/downloads/index.ts b/src/store/downloads/index.ts index 687576e..fb14416 100644 --- a/src/store/downloads/index.ts +++ b/src/store/downloads/index.ts @@ -7,7 +7,7 @@ interface State { ids: EntityId[]; } -const initialState: State = { +export const initialState: State = { entities: {}, ids: [], }; diff --git a/src/store/index.ts b/src/store/index.ts index 6ac660b..b7746da 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,19 +1,32 @@ import { configureStore, getDefaultMiddleware, combineReducers } from '@reduxjs/toolkit'; import { useSelector, TypedUseSelectorHook, useDispatch } from 'react-redux'; 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 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 = { key: 'root', 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({ settings, music: music.reducer, @@ -22,11 +35,16 @@ const reducers = combineReducers({ const persistedReducer = persistReducer(persistConfig, reducers); +const middlewares = []; +if (__DEV__) { + middlewares.push(require('redux-flipper').default()); +} + const store = configureStore({ reducer: persistedReducer, middleware: getDefaultMiddleware({ serializableCheck: false, immutableCheck: false }).concat( // logger, - __DEV__ ? require('redux-flipper').default() : undefined, + ...middlewares, ), }); diff --git a/src/store/music/index.ts b/src/store/music/index.ts index fa0a9cf..d2ef23d 100644 --- a/src/store/music/index.ts +++ b/src/store/music/index.ts @@ -35,7 +35,7 @@ export interface State { } } -const initialState: State = { +export const initialState: State = { albums: { ...albumAdapter.getInitialState(), isLoading: false,