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 { getCurrentUserFID } 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';
@@ -46,8 +46,11 @@
);
const userInfos = useSelector(state => state.userStore.userInfos);
+ const syncedMetadata = useSelector(
+ state => state.syncedMetadataStore.syncedMetadata,
+ );
- const fid = React.useContext(FIDContext)?.fid;
+ const fid = getCurrentUserFID(syncedMetadata);
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,12 @@
+// @flow
+
+import {
+ type SyncedMetadata,
+ syncedMetadataNames,
+} from '../types/synced-metadata-types.js';
+
+function getCurrentUserFID(syncedMetadata: SyncedMetadata): ?string {
+ return syncedMetadata[syncedMetadataNames.CURRENT_USER_FID] ?? null;
+}
+
+export { getCurrentUserFID };
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-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 { getCurrentUserFID } from 'lib/utils/farcaster-utils.js';
+import { useDispatch } from 'lib/utils/redux-utils.js';
import FarcasterPrompt from './farcaster-prompt.react.js';
import FarcasterWebView, {
@@ -17,6 +20,7 @@
import BottomSheet from '../bottom-sheet/bottom-sheet.react.js';
import type { RootNavigationProp } from '../navigation/root-navigator.react.js';
import type { NavigationRoute } from '../navigation/route-names.js';
+import { useSelector } from '../redux/redux-utils.js';
const bottomSheetPaddingTop = 32;
const farcasterPromptHeight = 350;
@@ -31,14 +35,31 @@
function ConnectFarcasterBottomSheet(props: Props): React.Node {
const { navigation } = props;
+ const dispatch = useDispatch();
+
+ const syncedMetadata = useSelector(
+ state => state.syncedMetadataStore.syncedMetadata,
+ );
+
+ const fid = getCurrentUserFID(syncedMetadata);
+
+ 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 +107,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 { getCurrentUserFID } 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';
@@ -12,6 +17,7 @@
import FarcasterWebView from '../components/farcaster-web-view.react.js';
import type { FarcasterWebViewState } from '../components/farcaster-web-view.react.js';
import type { NavigationRoute } from '../navigation/route-names.js';
+import { useSelector } from '../redux/redux-utils.js';
import { useStyles } from '../themes/colors.js';
type Props = {
@@ -21,16 +27,24 @@
// 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 syncedMetadata = useSelector(
+ state => state.syncedMetadataStore.syncedMetadata,
+ );
+
+ const fid = getCurrentUserFID(syncedMetadata);
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 +52,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(() => {