import React from 'react' import { ActivityIndicator, StyleSheet, TouchableWithoutFeedback, View, } from 'react-native' import RNPickerSelect from 'react-native-picker-select' import { CreateAccountState, CreateAccountDispatch, requestVerificationCode, } from './state' import {Text} from 'view/com/util/text/Text' import {StepHeader} from './StepHeader' import {s} from 'lib/styles' import {usePalette} from 'lib/hooks/usePalette' import {TextInput} from '../util/TextInput' import {Button} from '../../util/forms/Button' import {ErrorMessage} from 'view/com/util/error/ErrorMessage' import {isAndroid, isWeb} from 'platform/detection' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' import parsePhoneNumber from 'libphonenumber-js' import {COUNTRY_CODES} from '#/lib/country-codes' import { FontAwesomeIcon, FontAwesomeIconStyle, } from '@fortawesome/react-native-fontawesome' import {HITSLOP_10} from '#/lib/constants' export function Step2({ uiState, uiDispatch, }: { uiState: CreateAccountState uiDispatch: CreateAccountDispatch }) { const pal = usePalette('default') const {_} = useLingui() const {isMobile} = useWebMediaQueries() const onPressRequest = React.useCallback(() => { const phoneNumber = parsePhoneNumber( uiState.verificationPhone, uiState.phoneCountry, ) if (phoneNumber && phoneNumber.isValid()) { requestVerificationCode({uiState, uiDispatch, _}) } else { uiDispatch({ type: 'set-error', value: _( msg`There's something wrong with this number. Please choose your country and enter your full phone number!`, ), }) } }, [uiState, uiDispatch, _]) const onPressRetry = React.useCallback(() => { uiDispatch({type: 'set-has-requested-verification-code', value: false}) }, [uiDispatch]) const phoneNumberFormatted = React.useMemo( () => uiState.hasRequestedVerificationCode ? parsePhoneNumber( uiState.verificationPhone, uiState.phoneCountry, )?.formatInternational() : '', [ uiState.hasRequestedVerificationCode, uiState.verificationPhone, uiState.phoneCountry, ], ) return ( {!uiState.hasRequestedVerificationCode ? ( <> Country uiDispatch({type: 'set-phone-country', value}) } items={COUNTRY_CODES.filter(l => Boolean(l.code2)).map(l => ({ label: l.name, value: l.code2, key: l.code2, }))} style={{ inputAndroid: { backgroundColor: pal.view.backgroundColor, color: pal.text.color, fontSize: 21, letterSpacing: 0.5, fontWeight: '500', paddingHorizontal: 14, paddingVertical: 8, borderRadius: 4, }, inputIOS: { backgroundColor: pal.view.backgroundColor, color: pal.text.color, fontSize: 14, letterSpacing: 0.5, fontWeight: '500', paddingHorizontal: 14, paddingVertical: 8, borderWidth: 1, borderColor: pal.border.borderColor, borderRadius: 4, }, inputWeb: { // @ts-ignore web only cursor: 'pointer', '-moz-appearance': 'none', '-webkit-appearance': 'none', appearance: 'none', outline: 0, borderWidth: 1, borderColor: pal.border.borderColor, backgroundColor: pal.view.backgroundColor, color: pal.text.color, fontSize: 14, letterSpacing: 0.5, fontWeight: '500', paddingHorizontal: 14, paddingVertical: 8, borderRadius: 4, }, }} accessibilityLabel={_(msg`Select your phone's country`)} accessibilityHint="" accessibilityLabelledBy="phoneCountry" /> Phone number uiDispatch({type: 'set-verification-phone', value}) } accessibilityLabel={_(msg`Email`)} accessibilityHint={_( msg`Input phone number for SMS verification`, )} accessibilityLabelledBy="phoneNumber" keyboardType="phone-pad" autoCapitalize="none" autoComplete="tel" autoCorrect={false} autoFocus={true} /> Please enter a phone number that can receive SMS text messages. {uiState.isProcessing ? ( ) : (