import React from 'react' import { ActivityIndicator, KeyboardAvoidingView, ScrollView, StyleSheet, TouchableOpacity, View, } from 'react-native' import {observer} from 'mobx-react-lite' import {useAnalytics} from 'lib/analytics/analytics' import {Text} from '../../util/text/Text' import {LoggedOutLayout} from 'view/com/util/layouts/LoggedOutLayout' import {s} from 'lib/styles' import {useStores} from 'state/index' import {CreateAccountModel} from 'state/models/ui/create-account' import {usePalette} from 'lib/hooks/usePalette' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useOnboardingDispatch} from '#/state/shell' import {Step1} from './Step1' import {Step2} from './Step2' import {Step3} from './Step3' export const CreateAccount = observer(function CreateAccountImpl({ onPressBack, }: { onPressBack: () => void }) { const {track, screen} = useAnalytics() const pal = usePalette('default') const store = useStores() const model = React.useMemo(() => new CreateAccountModel(store), [store]) const {_} = useLingui() const onboardingDispatch = useOnboardingDispatch() React.useEffect(() => { screen('CreateAccount') }, [screen]) React.useEffect(() => { model.fetchServiceDescription() }, [model]) const onPressRetryConnect = React.useCallback( () => model.fetchServiceDescription(), [model], ) const onPressBackInner = React.useCallback(() => { if (model.canBack) { model.back() } else { onPressBack() } }, [model, onPressBack]) const onPressNext = React.useCallback(async () => { if (!model.canNext) { return } if (model.step < 3) { model.next() } else { try { await model.submit(onboardingDispatch) } catch { // dont need to handle here } finally { track('Try Create Account') } } }, [model, track, onboardingDispatch]) return ( {model.step === 1 && } {model.step === 2 && } {model.step === 3 && } Back {model.canNext ? ( {model.isProcessing ? ( ) : ( Next )} ) : model.didServiceDescriptionFetchFail ? ( Retry ) : model.isFetchingServiceDescription ? ( <> Connecting... ) : undefined} ) }) const styles = StyleSheet.create({ stepContainer: { paddingHorizontal: 20, paddingVertical: 20, }, })