2021-01-22 23:55:16 +01:00
|
|
|
import createSecureStore from '@neverdull-agency/expo-unlimited-secure-store'
|
2021-01-07 19:13:09 +01:00
|
|
|
import AsyncStorage from '@react-native-async-storage/async-storage'
|
|
|
|
import {
|
|
|
|
combineReducers,
|
|
|
|
configureStore,
|
|
|
|
getDefaultMiddleware
|
|
|
|
} from '@reduxjs/toolkit'
|
2021-01-18 00:23:40 +01:00
|
|
|
import contextsSlice from '@utils/slices/contextsSlice'
|
2021-02-05 13:45:02 +01:00
|
|
|
import instancesSlice, { InstancesState } from '@utils/slices/instancesSlice'
|
2020-12-13 14:04:25 +01:00
|
|
|
import settingsSlice from '@utils/slices/settingsSlice'
|
2021-02-05 13:45:02 +01:00
|
|
|
import { createMigrate, persistReducer, persistStore } from 'redux-persist'
|
2020-10-24 02:47:57 +02:00
|
|
|
|
2020-11-21 13:32:29 +01:00
|
|
|
const secureStorage = createSecureStore()
|
|
|
|
|
2021-01-31 03:09:35 +01:00
|
|
|
const prefix = 'tooot'
|
2021-01-07 19:13:09 +01:00
|
|
|
|
2021-01-18 00:23:40 +01:00
|
|
|
const contextsPersistConfig = {
|
|
|
|
key: 'contexts',
|
|
|
|
prefix,
|
|
|
|
storage: AsyncStorage
|
|
|
|
}
|
|
|
|
|
2021-02-05 13:45:02 +01:00
|
|
|
const instancesMigration = {
|
|
|
|
2: (state: InstancesState) => {
|
|
|
|
return {
|
|
|
|
...state,
|
|
|
|
local: {
|
|
|
|
...state.local,
|
|
|
|
instances: state.local.instances.map(instance => {
|
|
|
|
instance.max_toot_chars = 500
|
2021-02-07 00:39:11 +01:00
|
|
|
instance.drafts = []
|
2021-02-05 13:45:02 +01:00
|
|
|
return instance
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
2021-02-08 23:19:55 +01:00
|
|
|
},
|
|
|
|
3: (state: InstancesState) => {
|
|
|
|
return {
|
|
|
|
...state,
|
|
|
|
local: {
|
|
|
|
...state.local,
|
|
|
|
instances: state.local.instances.map(instance => {
|
|
|
|
if (!instance.urls) {
|
|
|
|
instance.urls = {
|
|
|
|
streaming_api: `wss://${instance.url}`
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return instance
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
2021-02-05 13:45:02 +01:00
|
|
|
}
|
|
|
|
}
|
2020-11-21 13:32:29 +01:00
|
|
|
const instancesPersistConfig = {
|
|
|
|
key: 'instances',
|
2021-01-07 19:13:09 +01:00
|
|
|
prefix,
|
2021-02-08 23:19:55 +01:00
|
|
|
version: 3,
|
2021-02-05 13:45:02 +01:00
|
|
|
storage: secureStorage,
|
|
|
|
migrate: createMigrate(instancesMigration, { debug: true })
|
2020-11-21 13:32:29 +01:00
|
|
|
}
|
|
|
|
|
2020-11-29 13:11:23 +01:00
|
|
|
const settingsPersistConfig = {
|
|
|
|
key: 'settings',
|
2021-01-07 19:13:09 +01:00
|
|
|
prefix,
|
2021-01-22 23:55:16 +01:00
|
|
|
storage: AsyncStorage
|
2020-11-29 13:11:23 +01:00
|
|
|
}
|
|
|
|
|
2021-01-07 19:13:09 +01:00
|
|
|
const rootPersistConfig = {
|
|
|
|
key: 'root',
|
|
|
|
prefix,
|
|
|
|
version: 0,
|
|
|
|
storage: AsyncStorage
|
|
|
|
}
|
|
|
|
|
|
|
|
const rootReducer = combineReducers({
|
2021-01-18 00:23:40 +01:00
|
|
|
contexts: persistReducer(contextsPersistConfig, contextsSlice),
|
2021-01-07 19:13:09 +01:00
|
|
|
instances: persistReducer(instancesPersistConfig, instancesSlice),
|
|
|
|
settings: persistReducer(settingsPersistConfig, settingsSlice)
|
|
|
|
})
|
|
|
|
|
2020-10-31 21:04:46 +01:00
|
|
|
const store = configureStore({
|
2021-01-07 19:13:09 +01:00
|
|
|
reducer: persistReducer(rootPersistConfig, rootReducer),
|
2020-11-22 00:46:23 +01:00
|
|
|
middleware: getDefaultMiddleware({
|
|
|
|
serializableCheck: {
|
|
|
|
ignoredActions: ['persist/PERSIST']
|
|
|
|
}
|
|
|
|
})
|
2020-10-24 02:47:57 +02:00
|
|
|
})
|
2020-10-31 21:04:46 +01:00
|
|
|
|
2020-11-21 13:32:29 +01:00
|
|
|
let persistor = persistStore(store)
|
2020-10-31 21:04:46 +01:00
|
|
|
|
2020-11-21 13:32:29 +01:00
|
|
|
export { store, persistor }
|
2020-10-31 21:04:46 +01:00
|
|
|
export type RootState = ReturnType<typeof store.getState>
|