diff --git a/lib/handlers/sync-store-version-handler.react.js b/lib/handlers/sync-store-version-handler.react.js new file mode 100644 --- /dev/null +++ b/lib/handlers/sync-store-version-handler.react.js @@ -0,0 +1,44 @@ +// @flow + +import * as React from 'react'; + +import { setSyncedMetadataEntryActionType } from '../actions/synced-metadata-actions.js'; +import { isLoggedIn } from '../selectors/user-selectors.js'; +import { syncedMetadataNames } from '../types/synced-metadata-types.js'; +import { getConfig } from '../utils/config.js'; +import { useDispatch, useSelector } from '../utils/redux-utils.js'; + +function SyncStoreVersionHandler(): React.Node { + const syncedMetadataStoreVersion = useSelector( + state => + state.syncedMetadataStore.syncedMetadata[ + syncedMetadataNames.STORE_VERSION + ] ?? undefined, + ); + const loggedIn = useSelector(isLoggedIn); + + const dispatch = useDispatch(); + + React.useEffect(() => { + if (!loggedIn) { + return; + } + + const { stateVersion } = getConfig().platformDetails; + if (!stateVersion || stateVersion === syncedMetadataStoreVersion) { + return; + } + + dispatch({ + type: setSyncedMetadataEntryActionType, + payload: { + name: syncedMetadataNames.STORE_VERSION, + data: stateVersion.toString(), + }, + }); + }, [dispatch, loggedIn, syncedMetadataStoreVersion]); + + return null; +} + +export { SyncStoreVersionHandler }; diff --git a/lib/types/synced-metadata-types.js b/lib/types/synced-metadata-types.js --- a/lib/types/synced-metadata-types.js +++ b/lib/types/synced-metadata-types.js @@ -8,7 +8,7 @@ const syncedMetadataNames = Object.freeze({ CURRENT_USER_FID: 'current_user_fid', - DB_VERSION: 'db_version', + STORE_VERSION: 'store_version', }); type SyncedMetadataName = $Values; diff --git a/lib/utils/migration-utils.js b/lib/utils/migration-utils.js --- a/lib/utils/migration-utils.js +++ b/lib/utils/migration-utils.js @@ -307,7 +307,7 @@ const versionUpdateOp = { type: 'replace_synced_metadata_entry', payload: { - name: syncedMetadataNames.DB_VERSION, + name: syncedMetadataNames.STORE_VERSION, data: versionKey.toString(), }, }; diff --git a/native/account/registration/registration-server-call.js b/native/account/registration/registration-server-call.js --- a/native/account/registration/registration-server-call.js +++ b/native/account/registration/registration-server-call.js @@ -3,7 +3,6 @@ import * as React from 'react'; import { setDataLoadedActionType } from 'lib/actions/client-db-store-actions.js'; -import { setSyncedMetadataEntryActionType } from 'lib/actions/synced-metadata-actions.js'; import { useIdentityPasswordRegister, identityRegisterActionTypes, @@ -17,7 +16,6 @@ logInActionSources, type LogOutResult, } from 'lib/types/account-types.js'; -import { syncedMetadataNames } from 'lib/types/synced-metadata-types.js'; import { getMessageForException } from 'lib/utils/errors.js'; import { useSetLocalFID } from 'lib/utils/farcaster-utils.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; @@ -37,7 +35,6 @@ useUploadSelectedMedia, } from '../../avatars/avatar-hooks.js'; import { commCoreModule } from '../../native-modules.js'; -import { persistConfig } from '../../redux/persist.js'; import { useSelector } from '../../redux/redux-utils.js'; import { appOutOfDateAlertDetails, @@ -427,13 +424,6 @@ } await nativeSetUserAvatar(updateUserAvatarRequest); } finally { - dispatch({ - type: setSyncedMetadataEntryActionType, - payload: { - name: syncedMetadataNames.DB_VERSION, - data: `${persistConfig.version}`, - }, - }); dispatch({ type: setDataLoadedActionType, payload: { diff --git a/native/root.react.js b/native/root.react.js --- a/native/root.react.js +++ b/native/root.react.js @@ -42,6 +42,7 @@ import { DBOpsHandler } from 'lib/handlers/db-ops-handler.react.js'; import { HoldersHandler } from 'lib/handlers/holders-handler.react.js'; import { InitialStateSharingHandler } from 'lib/handlers/initial-state-sharing-handler.react.js'; +import { SyncStoreVersionHandler } from 'lib/handlers/sync-store-version-handler.react.js'; import { TunnelbrokerDeviceTokenHandler } from 'lib/handlers/tunnelbroker-device-token-handler.react.js'; import { UserInfosHandler } from 'lib/handlers/user-infos-handler.react.js'; import { IdentitySearchProvider } from 'lib/identity-search/identity-search-context.js'; @@ -300,6 +301,7 @@ + ); diff --git a/web/app.react.js b/web/app.react.js --- a/web/app.react.js +++ b/web/app.react.js @@ -29,6 +29,7 @@ import SyncCommunityStoreHandler from 'lib/components/sync-community-store-handler.react.js'; import { DBOpsHandler } from 'lib/handlers/db-ops-handler.react.js'; import { HoldersHandler } from 'lib/handlers/holders-handler.react.js'; +import { SyncStoreVersionHandler } from 'lib/handlers/sync-store-version-handler.react.js'; import { TunnelbrokerDeviceTokenHandler } from 'lib/handlers/tunnelbroker-device-token-handler.react.js'; import { UserInfosHandler } from 'lib/handlers/user-infos-handler.react.js'; import { IdentitySearchProvider } from 'lib/identity-search/identity-search-context.js'; @@ -261,6 +262,7 @@ +