diff --git a/native/account/registration/avatar-selection.react.js b/native/account/registration/avatar-selection.react.js --- a/native/account/registration/avatar-selection.react.js +++ b/native/account/registration/avatar-selection.react.js @@ -37,6 +37,7 @@ +coolOrNerdMode: CoolOrNerdMode, +keyserverURL: string, +accountSelection: AccountSelection, + +farcasterID: ?string, }, }; diff --git a/native/account/registration/connect-ethereum.react.js b/native/account/registration/connect-ethereum.react.js --- a/native/account/registration/connect-ethereum.react.js +++ b/native/account/registration/connect-ethereum.react.js @@ -26,8 +26,7 @@ import { type NavigationRoute, ExistingEthereumAccountRouteName, - UsernameSelectionRouteName, - AvatarSelectionRouteName, + ConnectFarcasterRouteName, } from '../../navigation/route-names.js'; import { useSelector } from '../../redux/redux-utils.js'; import { useStyles } from '../../themes/colors.js'; @@ -53,7 +52,7 @@ }; function ConnectEthereum(props: Props): React.Node { const { params } = props.route; - const { userSelections } = props.route.params; + const { userSelections } = params; const registrationContext = React.useContext(RegistrationContext); invariant(registrationContext, 'registrationContext should be set'); @@ -126,8 +125,8 @@ const { navigate } = props.navigation; const onSkip = React.useCallback(() => { - navigate<'UsernameSelection'>({ - name: UsernameSelectionRouteName, + navigate<'ConnectFarcaster'>({ + name: ConnectFarcasterRouteName, params, }); }, [navigate, params]); @@ -177,10 +176,10 @@ const newUserSelections = { ...userSelections, - accountSelection: ethereumAccount, + ethereumAccount, }; - navigate<'AvatarSelection'>({ - name: AvatarSelectionRouteName, + navigate<'ConnectFarcaster'>({ + name: ConnectFarcasterRouteName, params: { userSelections: newUserSelections }, }); }, @@ -231,10 +230,10 @@ ); const newUserSelections = { ...userSelections, - accountSelection: ethereumAccount, + ethereumAccount, }; - navigate<'AvatarSelection'>({ - name: AvatarSelectionRouteName, + navigate<'ConnectFarcaster'>({ + name: ConnectFarcasterRouteName, params: { userSelections: newUserSelections }, }); }, [ethereumAccount, userSelections, navigate]); diff --git a/native/account/registration/connect-farcaster.react.js b/native/account/registration/connect-farcaster.react.js --- a/native/account/registration/connect-farcaster.react.js +++ b/native/account/registration/connect-farcaster.react.js @@ -14,7 +14,11 @@ import FarcasterPrompt from '../../components/farcaster-prompt.react.js'; 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 { + type NavigationRoute, + UsernameSelectionRouteName, + AvatarSelectionRouteName, +} from '../../navigation/route-names.js'; export type ConnectFarcasterParams = { +userSelections: { @@ -29,11 +33,51 @@ +route: NavigationRoute<'ConnectFarcaster'>, }; -// eslint-disable-next-line no-unused-vars function ConnectFarcaster(prop: Props): React.Node { + const { navigation, route } = prop; + + const { navigate } = navigation; + const { params } = route; + const [webViewState, setWebViewState] = React.useState('closed'); + const goToNextStep = React.useCallback( + (fid?: ?string) => { + setWebViewState('closed'); + + const { ethereumAccount, ...restUserSelections } = params.userSelections; + + if (ethereumAccount) { + navigate<'AvatarSelection'>({ + name: AvatarSelectionRouteName, + params: { + ...params, + userSelections: { + ...restUserSelections, + accountSelection: ethereumAccount, + farcasterID: fid, + }, + }, + }); + } else { + navigate<'UsernameSelection'>({ + name: UsernameSelectionRouteName, + params: { + ...params, + userSelections: { + ...restUserSelections, + farcasterID: fid, + }, + }, + }); + } + }, + [navigate, params], + ); + + const onSkip = React.useCallback(() => goToNextStep(), [goToNextStep]); + const onSuccess = React.useCallback(() => { // TODO: implement onSuccess }, []); @@ -58,10 +102,21 @@ label="Connect Farcaster account" variant={connectButtonVariant} /> + ), - [connectButtonVariant, onPressConnectFarcaster, onSuccess, webViewState], + [ + connectButtonVariant, + onPressConnectFarcaster, + onSkip, + onSuccess, + webViewState, + ], ); return connectFarcaster; diff --git a/native/account/registration/keyserver-selection.react.js b/native/account/registration/keyserver-selection.react.js --- a/native/account/registration/keyserver-selection.react.js +++ b/native/account/registration/keyserver-selection.react.js @@ -24,7 +24,7 @@ import { type NavigationRoute, ConnectEthereumRouteName, - AvatarSelectionRouteName, + ConnectFarcasterRouteName, } from '../../navigation/route-names.js'; import { useSelector } from '../../redux/redux-utils.js'; import { useStyles, useColors } from '../../themes/colors.js'; @@ -144,11 +144,11 @@ const userSelectionsWithAccount = { ...userSelections, - accountSelection: ethereumAccount, + ethereumAccount, }; setSkipEthereumLoginOnce(false); - navigate<'AvatarSelection'>({ - name: AvatarSelectionRouteName, + navigate<'ConnectFarcaster'>({ + name: ConnectFarcasterRouteName, params: { userSelections: userSelectionsWithAccount }, }); }, [ diff --git a/native/account/registration/password-selection.react.js b/native/account/registration/password-selection.react.js --- a/native/account/registration/password-selection.react.js +++ b/native/account/registration/password-selection.react.js @@ -25,6 +25,7 @@ +userSelections: { +coolOrNerdMode: CoolOrNerdMode, +keyserverURL: string, + +farcasterID: ?string, +username: string, }, }; @@ -76,10 +77,9 @@ return; } - const { coolOrNerdMode, keyserverURL, username } = userSelections; + const { username, ...rest } = userSelections; const newUserSelections = { - coolOrNerdMode, - keyserverURL, + ...rest, accountSelection: { accountType: 'username', username, diff --git a/native/account/registration/registration-terms.react.js b/native/account/registration/registration-terms.react.js --- a/native/account/registration/registration-terms.react.js +++ b/native/account/registration/registration-terms.react.js @@ -23,6 +23,7 @@ +userSelections: { +coolOrNerdMode: CoolOrNerdMode, +keyserverURL: string, + +farcasterID: ?string, +accountSelection: AccountSelection, +avatarData: ?AvatarData, }, diff --git a/native/account/registration/registration-types.js b/native/account/registration/registration-types.js --- a/native/account/registration/registration-types.js +++ b/native/account/registration/registration-types.js @@ -40,6 +40,7 @@ export type RegistrationServerCallInput = { +coolOrNerdMode: CoolOrNerdMode, +keyserverURL: string, + +farcasterID: ?string, +accountSelection: AccountSelection, +avatarData: ?AvatarData, }; diff --git a/native/account/registration/username-selection.react.js b/native/account/registration/username-selection.react.js --- a/native/account/registration/username-selection.react.js +++ b/native/account/registration/username-selection.react.js @@ -39,6 +39,7 @@ +userSelections: { +coolOrNerdMode: CoolOrNerdMode, +keyserverURL: string, + +farcasterID: ?string, }, };