diff --git a/web/root.js b/web/root.js index 7f3f21246..ea1d8712e 100644 --- a/web/root.js +++ b/web/root.js @@ -1,110 +1,114 @@ // @flow import * as React from 'react'; import { Provider } from 'react-redux'; import { Router, Route } from 'react-router'; import { createStore, applyMiddleware, type Store } from 'redux'; import { composeWithDevTools } from 'redux-devtools-extension/logOnlyInProduction.js'; import { persistReducer, persistStore } from 'redux-persist'; import { PersistGate } from 'redux-persist/es/integration/react.js'; import storage from 'redux-persist/es/storage/index.js'; import thunk from 'redux-thunk'; import { reduxLoggerMiddleware } from 'lib/utils/action-logger.js'; import { isDev } from 'lib/utils/dev-utils.js'; import App from './app.react.js'; import { databaseModule } from './database/database-module-provider.js'; import { SQLiteDataHandler } from './database/sqlite-data-handler.js'; import { isSQLiteSupported } from './database/utils/db-utils.js'; import ErrorBoundary from './error-boundary.react.js'; import Loading from './loading.react.js'; import { createAsyncMigrate } from './redux/create-async-migrate.js'; import { reducer } from './redux/redux-setup.js'; import type { AppState, Action } from './redux/redux-setup.js'; import history from './router-history.js'; import Socket from './socket.react.js'; import { workerRequestMessageTypes } from './types/worker-types.js'; +const initiallyLoggedInUserID = preloadedState.currentUserInfo?.anonymous + ? undefined + : preloadedState.currentUserInfo?.id; +const isDatabaseSupported = isSQLiteSupported(initiallyLoggedInUserID); + const migrations = { [1]: async state => { const { primaryIdentityPublicKey, ...stateWithoutPrimaryIdentityPublicKey } = state; return { ...stateWithoutPrimaryIdentityPublicKey, cryptoStore: { primaryAccount: null, primaryIdentityKeys: null, notificationAccount: null, notificationIdentityKeys: null, }, }; }, [2]: async state => { - const currentLoggedInUserID = preloadedState.currentUserInfo?.anonymous - ? undefined - : preloadedState.currentUserInfo?.id; - const isSupported = isSQLiteSupported(currentLoggedInUserID); - if (!isSupported) { + if (!isDatabaseSupported) { return state; } const { drafts } = state.draftStore; const draftStoreOperations = []; for (const key in drafts) { const text = drafts[key]; draftStoreOperations.push({ type: 'update', payload: { key, text }, }); } await databaseModule.schedule({ type: workerRequestMessageTypes.PROCESS_STORE_OPERATIONS, storeOperations: { draftStoreOperations }, }); return state; }, }; +const persistWhitelist = [ + 'enabledApps', + 'deviceID', + 'cryptoStore', + 'notifPermissionAlertInfo', + 'commServicesAccessToken', +]; + const persistConfig = { key: 'root', storage, - whitelist: [ - 'enabledApps', - 'deviceID', - 'draftStore', - 'cryptoStore', - 'notifPermissionAlertInfo', - 'commServicesAccessToken', - ], + whitelist: isDatabaseSupported + ? persistWhitelist + : [...persistWhitelist, 'draftStore'], migrate: (createAsyncMigrate(migrations, { debug: isDev }): any), version: 2, }; declare var preloadedState: AppState; const persistedReducer = persistReducer(persistConfig, reducer); const store: Store = createStore( persistedReducer, preloadedState, composeWithDevTools({})(applyMiddleware(thunk, reduxLoggerMiddleware)), ); const persistor = persistStore(store); const RootProvider = (): React.Node => ( }> ); export default RootProvider;