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
@@ -6,7 +6,6 @@
updateRelationships as serverUpdateRelationships,
updateRelationshipsActionTypes,
} from '../actions/relationship-actions.js';
-import { FIDContext } from '../components/fid-provider.react.js';
import { NeynarClientContext } from '../components/neynar-client-provider.react.js';
import { cookieSelector } from '../selectors/keyserver-selectors.js';
import { isLoggedIn } from '../selectors/user-selectors.js';
@@ -14,6 +13,7 @@
import { relationshipActions } from '../types/relationship-types.js';
import { useLegacyAshoatKeyserverCall } from '../utils/action-utils.js';
import { authoritativeKeyserverID } from '../utils/authoritative-keyserver.js';
+import { useCurrentUserFID } from '../utils/farcaster-utils.js';
import { useDispatchActionPromise } from '../utils/redux-promise-utils.js';
import { useSelector } from '../utils/redux-utils.js';
import { usingCommServicesAccessToken } from '../utils/services-utils.js';
@@ -47,7 +47,7 @@
const userInfos = useSelector(state => state.userStore.userInfos);
- const fid = React.useContext(FIDContext)?.fid;
+ const fid = useCurrentUserFID();
const prevCanQueryRef = React.useRef();
React.useEffect(() => {
diff --git a/lib/utils/farcaster-utils.js b/lib/utils/farcaster-utils.js
new file mode 100644
--- /dev/null
+++ b/lib/utils/farcaster-utils.js
@@ -0,0 +1,15 @@
+// @flow
+
+import { syncedMetadataNames } from '../types/synced-metadata-types.js';
+import { useSelector } from '../utils/redux-utils.js';
+
+function useCurrentUserFID(): ?string {
+ return useSelector(
+ state =>
+ state.syncedMetadataStore.syncedMetadata[
+ syncedMetadataNames.CURRENT_USER_FID
+ ] ?? null,
+ );
+}
+
+export { useCurrentUserFID };
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
@@ -1,17 +1,17 @@
// @flow
-import invariant from 'invariant';
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 {
keyserverRegisterActionTypes,
keyserverRegister,
useIdentityPasswordRegister,
identityRegisterActionTypes,
} from 'lib/actions/user-actions.js';
-import { FIDContext } from 'lib/components/fid-provider.react.js';
import type { LogInStartingPayload } from 'lib/types/account-types.js';
+import { syncedMetadataNames } from 'lib/types/synced-metadata-types.js';
import { useLegacyAshoatKeyserverCall } from 'lib/utils/action-utils.js';
import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js';
import { useDispatch } from 'lib/utils/redux-utils.js';
@@ -75,10 +75,6 @@
const callKeyserverRegister = useLegacyAshoatKeyserverCall(keyserverRegister);
const callIdentityPasswordRegister = useIdentityPasswordRegister();
- const fidContext = React.useContext(FIDContext);
- invariant(fidContext, 'FIDContext is missing');
- const { setFID } = fidContext;
-
const identityRegisterUsernameAccount = React.useCallback(
async (
accountSelection: UsernameAccountSelection,
@@ -248,7 +244,13 @@
type: setURLPrefix,
payload: keyserverURL,
});
- setFID(farcasterID);
+ dispatch({
+ type: setSyncedMetadataEntryActionType,
+ payload: {
+ name: syncedMetadataNames.CURRENT_USER_FID,
+ data: farcasterID,
+ },
+ });
setCurrentStep({
step: 'waiting_for_registration_call',
avatarData,
@@ -267,7 +269,6 @@
legacySiweServerCall,
dispatch,
identityWalletRegisterCall,
- setFID,
],
);
diff --git a/native/components/connect-farcaster-alert-handler.react.js b/native/components/connect-farcaster-alert-handler.react.js
--- a/native/components/connect-farcaster-alert-handler.react.js
+++ b/native/components/connect-farcaster-alert-handler.react.js
@@ -4,13 +4,13 @@
import * as React from 'react';
import { recordAlertActionType } from 'lib/actions/alert-actions.js';
-import { FIDContext } from 'lib/components/fid-provider.react.js';
import { cookieSelector } from 'lib/selectors/keyserver-selectors.js';
import {
alertTypes,
type RecordAlertActionPayload,
} from 'lib/types/alert-types.js';
import { authoritativeKeyserverID } from 'lib/utils/authoritative-keyserver.js';
+import { useCurrentUserFID } from 'lib/utils/farcaster-utils.js';
import { shouldSkipConnectFarcasterAlert } from 'lib/utils/push-alerts.js';
import { useDispatch } from 'lib/utils/redux-utils.js';
import sleep from 'lib/utils/sleep.js';
@@ -28,7 +28,7 @@
const hasUserCookie = !!(cookie && cookie.startsWith('user='));
const loggedIn = !!currentUserID && hasUserCookie;
- const fid = React.useContext(FIDContext)?.fid;
+ const fid = useCurrentUserFID();
const connectFarcasterAlertInfo = useSelector(
state => state.alertStore.alertInfos[alertTypes.CONNECT_FARCASTER],
diff --git a/native/components/connect-farcaster-bottom-sheet.react.js b/native/components/connect-farcaster-bottom-sheet.react.js
--- a/native/components/connect-farcaster-bottom-sheet.react.js
+++ b/native/components/connect-farcaster-bottom-sheet.react.js
@@ -5,8 +5,11 @@
import { View, StyleSheet } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
-import { FIDContext } from 'lib/components/fid-provider.react.js';
+import { setSyncedMetadataEntryActionType } from 'lib/actions/synced-metadata-actions.js';
import { useIsAppForegrounded } from 'lib/shared/lifecycle-utils.js';
+import { syncedMetadataNames } from 'lib/types/synced-metadata-types.js';
+import { useCurrentUserFID } from 'lib/utils/farcaster-utils.js';
+import { useDispatch } from 'lib/utils/redux-utils.js';
import FarcasterPrompt from './farcaster-prompt.react.js';
import FarcasterWebView, {
@@ -31,14 +34,27 @@
function ConnectFarcasterBottomSheet(props: Props): React.Node {
const { navigation } = props;
+ const dispatch = useDispatch();
+
+ const fid = useCurrentUserFID();
+
+ const onSuccess = React.useCallback(
+ (newFID: string) => {
+ dispatch({
+ type: setSyncedMetadataEntryActionType,
+ payload: {
+ name: syncedMetadataNames.CURRENT_USER_FID,
+ data: newFID,
+ },
+ });
+ },
+ [dispatch],
+ );
+
const { goBack } = navigation;
const bottomSheetRef = React.useRef(null);
- const fidContext = React.useContext(FIDContext);
- invariant(fidContext, 'fidContext is missing');
- const { fid, setFID } = fidContext;
-
const bottomSheetContext = React.useContext(BottomSheetContext);
invariant(bottomSheetContext, 'bottomSheetContext should be set');
const { setContentHeight } = bottomSheetContext;
@@ -86,10 +102,10 @@
variant={connectButtonVariant}
/>
-
+
),
- [connectButtonVariant, goBack, onPressConnect, setFID, webViewState],
+ [connectButtonVariant, goBack, onPressConnect, onSuccess, webViewState],
);
return connectFarcasterBottomSheet;
diff --git a/native/profile/farcaster-account-settings.react.js b/native/profile/farcaster-account-settings.react.js
--- a/native/profile/farcaster-account-settings.react.js
+++ b/native/profile/farcaster-account-settings.react.js
@@ -1,10 +1,15 @@
// @flow
-import invariant from 'invariant';
import * as React from 'react';
import { View } from 'react-native';
-import { FIDContext } from 'lib/components/fid-provider.react.js';
+import {
+ setSyncedMetadataEntryActionType,
+ clearSyncedMetadataEntryActionType,
+} from 'lib/actions/synced-metadata-actions.js';
+import { syncedMetadataNames } from 'lib/types/synced-metadata-types.js';
+import { useCurrentUserFID } from 'lib/utils/farcaster-utils.js';
+import { useDispatch } from 'lib/utils/redux-utils.js';
import type { ProfileNavigationProp } from './profile.react.js';
import RegistrationButton from '../account/registration/registration-button.react.js';
@@ -21,16 +26,20 @@
// eslint-disable-next-line no-unused-vars
function FarcasterAccountSettings(props: Props): React.Node {
- const fidContext = React.useContext(FIDContext);
- invariant(fidContext, 'FIDContext is missing');
+ const dispatch = useDispatch();
- const { fid, setFID } = fidContext;
+ const fid = useCurrentUserFID();
const styles = useStyles(unboundStyles);
const onPressDisconnect = React.useCallback(() => {
- setFID(null);
- }, [setFID]);
+ dispatch({
+ type: clearSyncedMetadataEntryActionType,
+ payload: {
+ name: syncedMetadataNames.CURRENT_USER_FID,
+ },
+ });
+ }, [dispatch]);
const [webViewState, setWebViewState] =
React.useState('closed');
@@ -38,9 +47,15 @@
const onSuccess = React.useCallback(
(newFID: string) => {
setWebViewState('closed');
- setFID(newFID);
+ dispatch({
+ type: setSyncedMetadataEntryActionType,
+ payload: {
+ name: syncedMetadataNames.CURRENT_USER_FID,
+ data: newFID,
+ },
+ });
},
- [setFID],
+ [dispatch],
);
const onPressConnectFarcaster = React.useCallback(() => {