diff --git a/lib/components/farcaster-data-handler.react.js b/lib/components/farcaster-data-handler.react.js --- a/lib/components/farcaster-data-handler.react.js +++ b/lib/components/farcaster-data-handler.react.js @@ -7,11 +7,13 @@ updateRelationships as serverUpdateRelationships, updateRelationshipsActionTypes, } from '../actions/relationship-actions.js'; +import { setSyncedMetadataEntryActionType } from '../actions/synced-metadata-actions.js'; import { NeynarClientContext } from '../components/neynar-client-provider.react.js'; import { useLegacyAshoatKeyserverCall } from '../keyserver-conn/legacy-keyserver-call.js'; import { cookieSelector } from '../selectors/keyserver-selectors.js'; import { IdentityClientContext } from '../shared/identity-client-context.js'; import { relationshipActions } from '../types/relationship-types.js'; +import { syncedMetadataNames } from '../types/synced-metadata-types.js'; import { authoritativeKeyserverID } from '../utils/authoritative-keyserver.js'; import { useCurrentUserFID } from '../utils/farcaster-utils.js'; import { useDispatchActionPromise } from '../utils/redux-promise-utils.js'; @@ -134,6 +136,40 @@ }); }, [loggedIn, isActive, findUserIdentities, userInfos, dispatch]); + const prevCanQueryHandleCurrentUserFIDRef = React.useRef(); + + const handleCurrentUserFID = React.useCallback(async () => { + const canQuery = isActive && !fid && loggedIn; + + if (canQuery === prevCanQueryHandleCurrentUserFIDRef.current) { + return; + } + prevCanQueryHandleCurrentUserFIDRef.current = canQuery; + + if ( + !loggedIn || + !isActive || + !findUserIdentities || + !currentUserID || + fid + ) { + return; + } + + const currentUserIdentityObj = await findUserIdentities([currentUserID]); + const identityFID = currentUserIdentityObj[currentUserID].farcasterID; + + if (identityFID) { + dispatch({ + type: setSyncedMetadataEntryActionType, + payload: { + name: syncedMetadataNames.CURRENT_USER_FID, + data: identityFID, + }, + }); + } + }, [loggedIn, isActive, findUserIdentities, currentUserID, fid, dispatch]); + React.useEffect(() => { if (!usingCommServicesAccessToken) { return; @@ -141,7 +177,8 @@ void handleFarcasterMutuals(); void handleUserStoreFIDs(); - }, [handleFarcasterMutuals, handleUserStoreFIDs]); + void handleCurrentUserFID(); + }, [handleCurrentUserFID, handleFarcasterMutuals, handleUserStoreFIDs]); return null; } diff --git a/web/app.react.js b/web/app.react.js --- a/web/app.react.js +++ b/web/app.react.js @@ -15,6 +15,7 @@ } from 'lib/actions/entry-actions.js'; import { ChatMentionContextProvider } from 'lib/components/chat-mention-provider.react.js'; import { EditUserAvatarProvider } from 'lib/components/edit-user-avatar-provider.react.js'; +import { FarcasterDataHandler } from 'lib/components/farcaster-data-handler.react.js'; import { ModalProvider, useModalContext, @@ -250,6 +251,7 @@ + {content}