diff --git a/native/account/registration/connect-ethereum.react.js b/native/account/registration/connect-ethereum.react.js new file mode 100644 --- /dev/null +++ b/native/account/registration/connect-ethereum.react.js @@ -0,0 +1,76 @@ +// @flow + +import * as React from 'react'; +import { Text, View } from 'react-native'; + +import RegistrationButton from './registration-button.react.js'; +import RegistrationContainer from './registration-container.react.js'; +import type { RegistrationNavigationProp } from './registration-navigator.react.js'; +import type { CoolOrNerdMode } from './registration-types.js'; +import type { NavigationRoute } from '../../navigation/route-names.js'; +import { useStyles } from '../../themes/colors.js'; + +export type ConnectEthereumParams = { + +userSelections: { + +coolOrNerdMode: CoolOrNerdMode, + +keyserverUsername: string, + }, +}; + +type Props = { + +navigation: RegistrationNavigationProp<'ConnectEthereum'>, + +route: NavigationRoute<'ConnectEthereum'>, +}; +// eslint-disable-next-line no-unused-vars +function ConnectEthereum(props: Props): React.Node { + const onConnect = React.useCallback(() => {}, []); + const onSkip = React.useCallback(() => {}, []); + + const styles = useStyles(unboundStyles); + return ( + + + + Do you want to connect an Ethereum Wallet to your account? + + + Connecting your Ethereum wallet allows you to cryptographically prove + your identity to your peers. You can use your ENS name as your + username and your ENS avatar as your avatar. You'll also be able + to secure your account with a wallet signature instead of a password. + + + + + + ); +} + +const unboundStyles = { + container: { + backgroundColor: 'panelBackground', + justifyContent: 'space-between', + flex: 1, + }, + header: { + fontSize: 24, + color: 'panelForegroundLabel', + paddingBottom: 16, + }, + body: { + fontSize: 15, + lineHeight: 20, + color: 'panelForegroundSecondaryLabel', + paddingBottom: 16, + }, +}; + +export default ConnectEthereum; 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 @@ -1,5 +1,6 @@ // @flow +import invariant from 'invariant'; import * as React from 'react'; import { Text, TextInput, View } from 'react-native'; @@ -12,7 +13,10 @@ } from './registration-tile.react.js'; import type { CoolOrNerdMode } from './registration-types.js'; import CommIcon from '../../components/comm-icon.react.js'; -import type { NavigationRoute } from '../../navigation/route-names.js'; +import { + type NavigationRoute, + ConnectEthereumRouteName, +} from '../../navigation/route-names.js'; import { useStyles, useColors } from '../../themes/colors.js'; type Selection = 'ashoat' | 'custom'; @@ -48,14 +52,27 @@ setCurrentSelection('custom'); }, []); - let buttonState = 'disabled'; - if ( - currentSelection === 'ashoat' || - (currentSelection === 'custom' && customKeyserver) - ) { - buttonState = 'enabled'; + let keyserverUsername; + if (currentSelection === 'ashoat') { + keyserverUsername = 'ashoat'; + } else if (currentSelection === 'custom' && customKeyserver) { + keyserverUsername = customKeyserver; } - const onSubmit = React.useCallback(() => {}, []); + + const buttonState = keyserverUsername ? 'enabled' : 'disabled'; + + const { navigate } = props.navigation; + const { coolOrNerdMode } = props.route.params.userSelections; + const onSubmit = React.useCallback(() => { + invariant( + keyserverUsername, + 'Button should be disabled if keyserverUsername is not set', + ); + navigate<'ConnectEthereum'>({ + name: ConnectEthereumRouteName, + params: { userSelections: { coolOrNerdMode, keyserverUsername } }, + }); + }, [navigate, coolOrNerdMode, keyserverUsername]); const styles = useStyles(unboundStyles); const colors = useColors(); diff --git a/native/account/registration/registration-navigator.react.js b/native/account/registration/registration-navigator.react.js --- a/native/account/registration/registration-navigator.react.js +++ b/native/account/registration/registration-navigator.react.js @@ -8,12 +8,14 @@ import * as React from 'react'; import { SafeAreaView } from 'react-native-safe-area-context'; +import ConnectEthereum from './connect-ethereum.react.js'; import CoolOrNerdModeSelection from './cool-or-nerd-mode-selection.react.js'; import KeyserverSelection from './keyserver-selection.react.js'; import type { RootNavigationProp } from '../../navigation/root-navigator.react.js'; import { KeyserverSelectionRouteName, CoolOrNerdModeSelectionRouteName, + ConnectEthereumRouteName, type ScreenParamList, type RegistrationParamList, } from '../../navigation/route-names.js'; @@ -59,6 +61,10 @@ name={KeyserverSelectionRouteName} component={KeyserverSelection} /> + ); diff --git a/native/navigation/route-names.js b/native/navigation/route-names.js --- a/native/navigation/route-names.js +++ b/native/navigation/route-names.js @@ -4,6 +4,7 @@ import type { ActionResultModalParams } from './action-result-modal.react.js'; import type { InviteLinkModalParams } from './invite-link-modal.react'; +import type { ConnectEthereumParams } from '../account/registration/connect-ethereum.react.js'; import type { KeyserverSelectionParams } from '../account/registration/keyserver-selection.react.js'; import type { TermsAndPrivacyModalParams } from '../account/terms-and-privacy-modal.react.js'; import type { ThreadPickerModalParams } from '../calendar/thread-picker-modal.react.js'; @@ -89,6 +90,7 @@ export const RegistrationRouteName = 'Registration'; export const KeyserverSelectionRouteName = 'KeyserverSelection'; export const CoolOrNerdModeSelectionRouteName = 'CoolOrNerdModeSelection'; +export const ConnectEthereumRouteName = 'ConnectEthereum'; export type RootParamList = { +LoggedOutModal: void, @@ -172,6 +174,7 @@ export type RegistrationParamList = { +CoolOrNerdModeSelection: void, +KeyserverSelection: KeyserverSelectionParams, + +ConnectEthereum: ConnectEthereumParams, }; export type ScreenParamList = {