diff --git a/native/account/logged-out-modal.react.js b/native/account/logged-out-modal.react.js --- a/native/account/logged-out-modal.react.js +++ b/native/account/logged-out-modal.react.js @@ -38,7 +38,12 @@ } from '../keyboard/keyboard.js'; import { createIsForegroundSelector } from '../navigation/nav-selectors.js'; import { NavContext } from '../navigation/navigation-context.js'; -import { LoggedOutModalRouteName } from '../navigation/route-names.js'; +import type { RootNavigationProp } from '../navigation/root-navigator.react.js'; +import { + type NavigationRoute, + LoggedOutModalRouteName, + RegistrationRouteName, +} from '../navigation/route-names.js'; import { resetUserStateActionType } from '../redux/action-types.js'; import { useSelector } from '../redux/redux-utils.js'; import { usePersistedStateLoaded } from '../selectors/app-state-selectors.js'; @@ -111,7 +116,13 @@ ); } +type BaseProps = { + +navigation: RootNavigationProp<'LoggedOutModal'>, + +route: NavigationRoute<'LoggedOutModal'>, +}; + type Props = { + ...BaseProps, // Navigation state +isForeground: boolean, // Redux state @@ -125,7 +136,6 @@ +styles: typeof unboundStyles, // Redux dispatch functions +dispatch: Dispatch, - ... }; type State = { +mode: LoggedOutMode, @@ -525,13 +535,13 @@ if (__DEV__) { registerButtons.push( - Register + Register (new) , ); @@ -637,6 +647,10 @@ this.keyboardHeightValue.setValue(-1); this.setMode('register'); }; + + onPressNewRegister = () => { + this.props.navigation.navigate(RegistrationRouteName); + }; } const unboundStyles = { @@ -747,39 +761,38 @@ LoggedOutModalRouteName, ); -const ConnectedLoggedOutModal: React.ComponentType<{ ... }> = React.memo<{ - ... -}>(function ConnectedLoggedOutModal(props: { ... }) { - const navContext = React.useContext(NavContext); - const isForeground = isForegroundSelector(navContext); +const ConnectedLoggedOutModal: React.ComponentType = + React.memo(function ConnectedLoggedOutModal(props: BaseProps) { + const navContext = React.useContext(NavContext); + const isForeground = isForegroundSelector(navContext); - const rehydrateConcluded = useSelector( - state => !!(state._persist && state._persist.rehydrated && navContext), - ); - const persistedStateLoaded = usePersistedStateLoaded(); - const cookie = useSelector(state => state.cookie); - const urlPrefix = useSelector(state => state.urlPrefix); - const loggedIn = useSelector(isLoggedIn); - const dimensions = useSelector(derivedDimensionsInfoSelector); - const splashStyle = useSelector(splashStyleSelector); - const styles = useStyles(unboundStyles); - - const dispatch = useDispatch(); - return ( - - ); -}); + const rehydrateConcluded = useSelector( + state => !!(state._persist && state._persist.rehydrated && navContext), + ); + const persistedStateLoaded = usePersistedStateLoaded(); + const cookie = useSelector(state => state.cookie); + const urlPrefix = useSelector(state => state.urlPrefix); + const loggedIn = useSelector(isLoggedIn); + const dimensions = useSelector(derivedDimensionsInfoSelector); + const splashStyle = useSelector(splashStyleSelector); + const styles = useStyles(unboundStyles); + + const dispatch = useDispatch(); + return ( + + ); + }); export default ConnectedLoggedOutModal; diff --git a/native/account/registration/keyserver-selection.react.js b/native/account/registration/keyserver-selection.react.js new file mode 100644 --- /dev/null +++ b/native/account/registration/keyserver-selection.react.js @@ -0,0 +1,34 @@ +// @flow + +import * as React from 'react'; +import { View, Text } from 'react-native'; + +import type { RegistrationNavigationProp } from './registration-navigator.react.js'; +import type { NavigationRoute } from '../../navigation/route-names.js'; +import { useStyles } from '../../themes/colors.js'; + +type Props = { + +navigation: RegistrationNavigationProp<'KeyserverSelection'>, + +route: NavigationRoute<'KeyserverSelection'>, +}; +// eslint-disable-next-line no-unused-vars +function KeyserverSelection(props: Props): React.Node { + const styles = useStyles(unboundStyles); + return ( + + Test Hello Test + + ); +} + +const unboundStyles = { + background: { + backgroundColor: 'panelBackground', + }, + testText: { + fontSize: 24, + color: 'white', + }, +}; + +export default KeyserverSelection; diff --git a/native/account/registration/registration-navigator.react.js b/native/account/registration/registration-navigator.react.js new file mode 100644 --- /dev/null +++ b/native/account/registration/registration-navigator.react.js @@ -0,0 +1,55 @@ +// @flow + +import { + createStackNavigator, + type StackNavigationProp, + type StackNavigationHelpers, +} from '@react-navigation/stack'; +import * as React from 'react'; +import { View } from 'react-native'; + +import KeyserverSelection from './keyserver-selection.react.js'; +import type { RootNavigationProp } from '../../navigation/root-navigator.react.js'; +import { + KeyserverSelectionRouteName, + type ScreenParamList, + type RegistrationParamList, +} from '../../navigation/route-names.js'; +import { useStyles } from '../../themes/colors.js'; + +export type RegistrationNavigationProp< + RouteName: $Keys = $Keys, +> = StackNavigationProp; + +const Registration = createStackNavigator< + ScreenParamList, + RegistrationParamList, + StackNavigationHelpers, +>(); +type Props = { + +navigation: RootNavigationProp<'Registration'>, + ... +}; +// eslint-disable-next-line no-unused-vars +function RegistrationNavigator(props: Props): React.Node { + const styles = useStyles(unboundStyles); + return ( + + + + + + ); +} + +const unboundStyles = { + view: { + flex: 1, + backgroundColor: 'panelBackground', + }, +}; + +export default RegistrationNavigator; diff --git a/native/navigation/root-navigator.react.js b/native/navigation/root-navigator.react.js --- a/native/navigation/root-navigator.react.js +++ b/native/navigation/root-navigator.react.js @@ -38,8 +38,10 @@ type ScreenParamList, type RootParamList, TermsAndPrivacyRouteName, + RegistrationRouteName, } from './route-names.js'; import LoggedOutModal from '../account/logged-out-modal.react.js'; +import RegistrationNavigator from '../account/registration/registration-navigator.react.js'; import TermsAndPrivacyModal from '../account/terms-and-privacy-modal.react.js'; import ThreadPickerModal from '../calendar/thread-picker-modal.react.js'; import ImagePasteModal from '../chat/image-paste-modal.react.js'; @@ -190,6 +192,11 @@ component={LoggedOutModal} options={disableGesturesScreenOptions} /> + > = RouteProp; -export const accountModals = [LoggedOutModalRouteName]; +export const accountModals = [LoggedOutModalRouteName, RegistrationRouteName]; export const scrollBlockingModals = [ ImageModalRouteName,