diff --git a/lib/components/platform-details-synchronizer.react.js b/lib/components/platform-details-synchronizer.react.js new file mode 100644 --- /dev/null +++ b/lib/components/platform-details-synchronizer.react.js @@ -0,0 +1,42 @@ +// @flow + +import * as React from 'react'; + +import { isLoggedIn } from '../selectors/user-selectors.js'; +import { IdentityClientContext } from '../shared/identity-client-context.js'; +import { useSelector } from '../utils/redux-utils.js'; +import { usingCommServicesAccessToken } from '../utils/services-utils.js'; + +function PlatformDetailsSynchronizer(): React.Node { + const client = React.useContext(IdentityClientContext); + const identityClient = client?.identityClient; + + const loggedIn = useSelector(isLoggedIn); + + const syncPlatformDetails = React.useCallback(async () => { + if (!identityClient) { + throw new Error('Identity service client is not initialized'); + } + if (!loggedIn) { + return; + } + try { + await identityClient.syncPlatformDetails(); + } catch (error) { + console.log('Error syncing platform details:', error); + } + }, [identityClient, loggedIn]); + + const hasRun = React.useRef(false); + React.useEffect(() => { + if (!usingCommServicesAccessToken || hasRun.current) { + return; + } + hasRun.current = true; + void syncPlatformDetails(); + }, [syncPlatformDetails]); + + return null; +} + +export default PlatformDetailsSynchronizer; diff --git a/native/root.react.js b/native/root.react.js --- a/native/root.react.js +++ b/native/root.react.js @@ -30,6 +30,7 @@ import IntegrityHandler from 'lib/components/integrity-handler.react.js'; import { MediaCacheProvider } from 'lib/components/media-cache-provider.react.js'; import { NeynarClientProvider } from 'lib/components/neynar-client-provider.react.js'; +import PlatformDetailsSynchronizer from 'lib/components/platform-details-synchronizer.react.js'; import PrekeysHandler from 'lib/components/prekeys-handler.react.js'; import { StaffContextProvider } from 'lib/components/staff-provider.react.js'; import { DBOpsHandler } from 'lib/handlers/db-ops-handler.react.js'; @@ -340,6 +341,7 @@ } /> + diff --git a/web/app.react.js b/web/app.react.js --- a/web/app.react.js +++ b/web/app.react.js @@ -20,6 +20,7 @@ useModalContext, } from 'lib/components/modal-provider.react.js'; import { NeynarClientProvider } from 'lib/components/neynar-client-provider.react.js'; +import PlatformDetailsSynchronizer from 'lib/components/platform-details-synchronizer.react.js'; import { StaffContextProvider } from 'lib/components/staff-provider.react.js'; import { UserInfosHandler } from 'lib/handlers/user-infos-handler.react.js'; import { IdentitySearchProvider } from 'lib/identity-search/identity-search-context.js'; @@ -237,6 +238,7 @@ + {content} diff --git a/web/components/version-handler.react.js b/web/components/version-handler.react.js --- a/web/components/version-handler.react.js +++ b/web/components/version-handler.react.js @@ -8,7 +8,7 @@ import VersionUnsupportedModal from '../modals/version-unsupported-modal.react.js'; import { useSelector } from '../redux/redux-utils.js'; -function MinVersionHandler(): null { +function MinVersionHandler(): React.Node { const connections = useSelector(allConnectionInfosSelector); const isClientVersionUnsupported = React.useMemo(() => {