diff --git a/web/database/utils/store.js b/web/database/utils/store.js --- a/web/database/utils/store.js +++ b/web/database/utils/store.js @@ -2,7 +2,11 @@ import { reportStoreOpsHandlers } from 'lib/ops/report-store-ops.js'; import { threadStoreOpsHandlers } from 'lib/ops/thread-store-ops.js'; -import type { ClientStore } from 'lib/types/store-ops-types.js'; +import { canUseDatabaseOnWeb } from 'lib/shared/web-database.js'; +import type { + ClientStore, + StoreOperations, +} from 'lib/types/store-ops-types.js'; import { workerRequestMessageTypes } from '../../types/worker-types.js'; import { getDatabaseModule } from '../database-module-provider.js'; @@ -46,4 +50,32 @@ return result; } -export { getClientStore }; +async function processDBStoreOperations( + storeOperations: StoreOperations, + userID: ?string, +): Promise { + const { draftStoreOperations, threadStoreOperations, reportStoreOperations } = + storeOperations; + + const convertedThreadStoreOperations = canUseDatabaseOnWeb(userID) + ? threadStoreOpsHandlers.convertOpsToClientDBOps(threadStoreOperations) + : []; + const convertedReportStoreOperations = + reportStoreOpsHandlers.convertOpsToClientDBOps(reportStoreOperations); + + const databaseModule = await getDatabaseModule(); + const isSupported = await databaseModule.isDatabaseSupported(); + if (!isSupported) { + return; + } + await databaseModule.schedule({ + type: workerRequestMessageTypes.PROCESS_STORE_OPERATIONS, + storeOperations: { + draftStoreOperations, + reportStoreOperations: convertedReportStoreOperations, + threadStoreOperations: convertedThreadStoreOperations, + }, + }); +} + +export { getClientStore, processDBStoreOperations }; diff --git a/web/redux/redux-setup.js b/web/redux/redux-setup.js --- a/web/redux/redux-setup.js +++ b/web/redux/redux-setup.js @@ -7,8 +7,6 @@ logOutActionTypes, deleteAccountActionTypes, } from 'lib/actions/user-actions.js'; -import { reportStoreOpsHandlers } from 'lib/ops/report-store-ops.js'; -import { threadStoreOpsHandlers } from 'lib/ops/thread-store-ops.js'; import baseReducer from 'lib/reducers/master-reducer.js'; import { mostRecentlyReadThreadSelector } from 'lib/selectors/thread-selectors.js'; import { isLoggedIn } from 'lib/selectors/user-selectors.js'; @@ -48,11 +46,10 @@ import reduceNavInfo from './nav-reducer.js'; import { onStateDifference } from './redux-debug-utils.js'; import { getVisibility } from './visibility.js'; -import { getDatabaseModule } from '../database/database-module-provider.js'; +import { processDBStoreOperations } from '../database/utils/store.js'; import { activeThreadSelector } from '../selectors/nav-selectors.js'; import { type NavInfo } from '../types/nav-types.js'; import type { InitialReduxState } from '../types/redux-types.js'; -import { workerRequestMessageTypes } from '../types/worker-types.js'; export type WindowDimensions = { width: number, height: number }; @@ -194,43 +191,10 @@ const baseReducerResult = baseReducer(state, action, onStateDifference); state = baseReducerResult.state; - const { - storeOperations: { - draftStoreOperations, - reportStoreOperations, - threadStoreOperations, - }, - } = baseReducerResult; - if ( - draftStoreOperations.length > 0 || - reportStoreOperations.length > 0 || - threadStoreOperations.length > 0 - ) { - (async () => { - const databaseModule = await getDatabaseModule(); - const isSupported = await databaseModule.isDatabaseSupported(); - if (!isSupported) { - return; - } - const convertedReportStoreOperations = - reportStoreOpsHandlers.convertOpsToClientDBOps(reportStoreOperations); - const convertedThreadStoreOperations = canUseDatabaseOnWeb( - state.currentUserInfo?.id, - ) - ? threadStoreOpsHandlers.convertOpsToClientDBOps( - threadStoreOperations, - ) - : []; - await databaseModule.schedule({ - type: workerRequestMessageTypes.PROCESS_STORE_OPERATIONS, - storeOperations: { - draftStoreOperations, - reportStoreOperations: convertedReportStoreOperations, - threadStoreOperations: convertedThreadStoreOperations, - }, - }); - })(); - } + processDBStoreOperations( + baseReducerResult.storeOperations, + state.currentUserInfo?.id, + ); } const communityPickerStore = reduceCommunityPickerStore(