Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Improve country-code handling for text verification (#2579)

authored by

Paul Frazee and committed by
GitHub
e1759845 b96302be

+371 -7
+253
src/lib/country-codes.ts
··· 1 + import {CountryCode} from 'libphonenumber-js' 2 + 3 + // ISO 3166-1 alpha-2 codes 4 + 5 + export interface CountryCodeMap { 6 + code2: CountryCode 7 + name: string 8 + } 9 + 10 + export const COUNTRY_CODES: CountryCodeMap[] = [ 11 + {code2: 'AF', name: 'Afghanistan (+93)'}, 12 + {code2: 'AX', name: 'Åland Islands (+358)'}, 13 + {code2: 'AL', name: 'Albania (+355)'}, 14 + {code2: 'DZ', name: 'Algeria (+213)'}, 15 + {code2: 'AS', name: 'American Samoa (+1)'}, 16 + {code2: 'AD', name: 'Andorra (+376)'}, 17 + {code2: 'AO', name: 'Angola (+244)'}, 18 + {code2: 'AI', name: 'Anguilla (+1)'}, 19 + {code2: 'AG', name: 'Antigua and Barbuda (+1)'}, 20 + {code2: 'AR', name: 'Argentina (+54)'}, 21 + {code2: 'AM', name: 'Armenia (+374)'}, 22 + {code2: 'AW', name: 'Aruba (+297)'}, 23 + {code2: 'AU', name: 'Australia (+61)'}, 24 + {code2: 'AT', name: 'Austria (+43)'}, 25 + {code2: 'AZ', name: 'Azerbaijan (+994)'}, 26 + {code2: 'BS', name: 'Bahamas (+1)'}, 27 + {code2: 'BH', name: 'Bahrain (+973)'}, 28 + {code2: 'BD', name: 'Bangladesh (+880)'}, 29 + {code2: 'BB', name: 'Barbados (+1)'}, 30 + {code2: 'BY', name: 'Belarus (+375)'}, 31 + {code2: 'BE', name: 'Belgium (+32)'}, 32 + {code2: 'BZ', name: 'Belize (+501)'}, 33 + {code2: 'BJ', name: 'Benin (+229)'}, 34 + {code2: 'BM', name: 'Bermuda (+1)'}, 35 + {code2: 'BT', name: 'Bhutan (+975)'}, 36 + {code2: 'BO', name: 'Bolivia (Plurinational State of) (+591)'}, 37 + {code2: 'BQ', name: 'Bonaire, Sint Eustatius and Saba (+599)'}, 38 + {code2: 'BA', name: 'Bosnia and Herzegovina (+387)'}, 39 + {code2: 'BW', name: 'Botswana (+267)'}, 40 + {code2: 'BR', name: 'Brazil (+55)'}, 41 + {code2: 'IO', name: 'British Indian Ocean Territory (+246)'}, 42 + {code2: 'BN', name: 'Brunei Darussalam (+673)'}, 43 + {code2: 'BG', name: 'Bulgaria (+359)'}, 44 + {code2: 'BF', name: 'Burkina Faso (+226)'}, 45 + {code2: 'BI', name: 'Burundi (+257)'}, 46 + {code2: 'CV', name: 'Cabo Verde (+238)'}, 47 + {code2: 'KH', name: 'Cambodia (+855)'}, 48 + {code2: 'CM', name: 'Cameroon (+237)'}, 49 + {code2: 'CA', name: 'Canada (+1)'}, 50 + {code2: 'KY', name: 'Cayman Islands (+1)'}, 51 + {code2: 'CF', name: 'Central African Republic (+236)'}, 52 + {code2: 'TD', name: 'Chad (+235)'}, 53 + {code2: 'CL', name: 'Chile (+56)'}, 54 + {code2: 'CN', name: 'China (+86)'}, 55 + {code2: 'CX', name: 'Christmas Island (+61)'}, 56 + {code2: 'CC', name: 'Cocos (Keeling) Islands (+61)'}, 57 + {code2: 'CO', name: 'Colombia (+57)'}, 58 + {code2: 'KM', name: 'Comoros (+269)'}, 59 + {code2: 'CG', name: 'Congo (+242)'}, 60 + {code2: 'CD', name: 'Congo, Democratic Republic of the (+243)'}, 61 + {code2: 'CK', name: 'Cook Islands (+682)'}, 62 + {code2: 'CR', name: 'Costa Rica (+506)'}, 63 + {code2: 'CI', name: "Côte d'Ivoire (+225)"}, 64 + {code2: 'HR', name: 'Croatia (+385)'}, 65 + {code2: 'CU', name: 'Cuba (+53)'}, 66 + {code2: 'CW', name: 'Curaçao (+599)'}, 67 + {code2: 'CY', name: 'Cyprus (+357)'}, 68 + {code2: 'CZ', name: 'Czechia (+420)'}, 69 + {code2: 'DK', name: 'Denmark (+45)'}, 70 + {code2: 'DJ', name: 'Djibouti (+253)'}, 71 + {code2: 'DM', name: 'Dominica (+1)'}, 72 + {code2: 'DO', name: 'Dominican Republic (+1)'}, 73 + {code2: 'EC', name: 'Ecuador (+593)'}, 74 + {code2: 'EG', name: 'Egypt (+20)'}, 75 + {code2: 'SV', name: 'El Salvador (+503)'}, 76 + {code2: 'GQ', name: 'Equatorial Guinea (+240)'}, 77 + {code2: 'ER', name: 'Eritrea (+291)'}, 78 + {code2: 'EE', name: 'Estonia (+372)'}, 79 + {code2: 'SZ', name: 'Eswatini (+268)'}, 80 + {code2: 'ET', name: 'Ethiopia (+251)'}, 81 + {code2: 'FK', name: 'Falkland Islands (Malvinas) (+500)'}, 82 + {code2: 'FO', name: 'Faroe Islands (+298)'}, 83 + {code2: 'FJ', name: 'Fiji (+679)'}, 84 + {code2: 'FI', name: 'Finland (+358)'}, 85 + {code2: 'FR', name: 'France (+33)'}, 86 + {code2: 'GF', name: 'French Guiana (+594)'}, 87 + {code2: 'PF', name: 'French Polynesia (+689)'}, 88 + {code2: 'GA', name: 'Gabon (+241)'}, 89 + {code2: 'GM', name: 'Gambia (+220)'}, 90 + {code2: 'GE', name: 'Georgia (+995)'}, 91 + {code2: 'DE', name: 'Germany (+49)'}, 92 + {code2: 'GH', name: 'Ghana (+233)'}, 93 + {code2: 'GI', name: 'Gibraltar (+350)'}, 94 + {code2: 'GB', name: 'Great Britain (+44)'}, 95 + {code2: 'GR', name: 'Greece (+30)'}, 96 + {code2: 'GL', name: 'Greenland (+299)'}, 97 + {code2: 'GD', name: 'Grenada (+1)'}, 98 + {code2: 'GP', name: 'Guadeloupe (+590)'}, 99 + {code2: 'GU', name: 'Guam (+1)'}, 100 + {code2: 'GT', name: 'Guatemala (+502)'}, 101 + {code2: 'GG', name: 'Guernsey (+44)'}, 102 + {code2: 'GN', name: 'Guinea (+224)'}, 103 + {code2: 'GW', name: 'Guinea-Bissau (+245)'}, 104 + {code2: 'GY', name: 'Guyana (+592)'}, 105 + {code2: 'HT', name: 'Haiti (+509)'}, 106 + {code2: 'VA', name: 'Holy See (+39)'}, 107 + {code2: 'HN', name: 'Honduras (+504)'}, 108 + {code2: 'HK', name: 'Hong Kong (+852)'}, 109 + {code2: 'HU', name: 'Hungary (+36)'}, 110 + {code2: 'IS', name: 'Iceland (+354)'}, 111 + {code2: 'IN', name: 'India (+91)'}, 112 + {code2: 'ID', name: 'Indonesia (+62)'}, 113 + {code2: 'IR', name: 'Iran (Islamic Republic of) (+98)'}, 114 + {code2: 'IQ', name: 'Iraq (+964)'}, 115 + {code2: 'IE', name: 'Ireland (+353)'}, 116 + {code2: 'IM', name: 'Isle of Man (+44)'}, 117 + {code2: 'IL', name: 'Israel (+972)'}, 118 + {code2: 'IT', name: 'Italy (+39)'}, 119 + {code2: 'JM', name: 'Jamaica (+1)'}, 120 + {code2: 'JP', name: 'Japan (+81)'}, 121 + {code2: 'JE', name: 'Jersey (+44)'}, 122 + {code2: 'JO', name: 'Jordan (+962)'}, 123 + {code2: 'KZ', name: 'Kazakhstan (+7)'}, 124 + {code2: 'KE', name: 'Kenya (+254)'}, 125 + {code2: 'KI', name: 'Kiribati (+686)'}, 126 + {code2: 'KP', name: "Korea (Democratic People's Republic of) (+850)"}, 127 + {code2: 'KR', name: 'Korea, Republic of (+82)'}, 128 + {code2: 'KW', name: 'Kuwait (+965)'}, 129 + {code2: 'KG', name: 'Kyrgyzstan (+996)'}, 130 + {code2: 'LA', name: "Lao People's Democratic Republic (+856)"}, 131 + {code2: 'LV', name: 'Latvia (+371)'}, 132 + {code2: 'LB', name: 'Lebanon (+961)'}, 133 + {code2: 'LS', name: 'Lesotho (+266)'}, 134 + {code2: 'LR', name: 'Liberia (+231)'}, 135 + {code2: 'LY', name: 'Libya (+218)'}, 136 + {code2: 'LI', name: 'Liechtenstein (+423)'}, 137 + {code2: 'LT', name: 'Lithuania (+370)'}, 138 + {code2: 'LU', name: 'Luxembourg (+352)'}, 139 + {code2: 'MO', name: 'Macao (+853)'}, 140 + {code2: 'MG', name: 'Madagascar (+261)'}, 141 + {code2: 'MW', name: 'Malawi (+265)'}, 142 + {code2: 'MY', name: 'Malaysia (+60)'}, 143 + {code2: 'MV', name: 'Maldives (+960)'}, 144 + {code2: 'ML', name: 'Mali (+223)'}, 145 + {code2: 'MT', name: 'Malta (+356)'}, 146 + {code2: 'MH', name: 'Marshall Islands (+692)'}, 147 + {code2: 'MQ', name: 'Martinique (+596)'}, 148 + {code2: 'MR', name: 'Mauritania (+222)'}, 149 + {code2: 'MU', name: 'Mauritius (+230)'}, 150 + {code2: 'YT', name: 'Mayotte (+262)'}, 151 + {code2: 'MX', name: 'Mexico (+52)'}, 152 + {code2: 'FM', name: 'Micronesia (Federated States of) (+691)'}, 153 + {code2: 'MD', name: 'Moldova, Republic of (+373)'}, 154 + {code2: 'MC', name: 'Monaco (+377)'}, 155 + {code2: 'MN', name: 'Mongolia (+976)'}, 156 + {code2: 'ME', name: 'Montenegro (+382)'}, 157 + {code2: 'MS', name: 'Montserrat (+1)'}, 158 + {code2: 'MA', name: 'Morocco (+212)'}, 159 + {code2: 'MZ', name: 'Mozambique (+258)'}, 160 + {code2: 'MM', name: 'Myanmar (+95)'}, 161 + {code2: 'NA', name: 'Namibia (+264)'}, 162 + {code2: 'NR', name: 'Nauru (+674)'}, 163 + {code2: 'NP', name: 'Nepal (+977)'}, 164 + {code2: 'NL', name: 'Netherlands, Kingdom of the (+31)'}, 165 + {code2: 'NC', name: 'New Caledonia (+687)'}, 166 + {code2: 'NZ', name: 'New Zealand (+64)'}, 167 + {code2: 'NI', name: 'Nicaragua (+505)'}, 168 + {code2: 'NE', name: 'Niger (+227)'}, 169 + {code2: 'NG', name: 'Nigeria (+234)'}, 170 + {code2: 'NU', name: 'Niue (+683)'}, 171 + {code2: 'NF', name: 'Norfolk Island (+672)'}, 172 + {code2: 'MK', name: 'North Macedonia (+389)'}, 173 + {code2: 'MP', name: 'Northern Mariana Islands (+1)'}, 174 + {code2: 'NO', name: 'Norway (+47)'}, 175 + {code2: 'OM', name: 'Oman (+968)'}, 176 + {code2: 'PK', name: 'Pakistan (+92)'}, 177 + {code2: 'PW', name: 'Palau (+680)'}, 178 + {code2: 'PS', name: 'Palestine, State of (+970)'}, 179 + {code2: 'PA', name: 'Panama (+507)'}, 180 + {code2: 'PG', name: 'Papua New Guinea (+675)'}, 181 + {code2: 'PY', name: 'Paraguay (+595)'}, 182 + {code2: 'PE', name: 'Peru (+51)'}, 183 + {code2: 'PH', name: 'Philippines (+63)'}, 184 + {code2: 'PL', name: 'Poland (+48)'}, 185 + {code2: 'PT', name: 'Portugal (+351)'}, 186 + {code2: 'PR', name: 'Puerto Rico (+1)'}, 187 + {code2: 'QA', name: 'Qatar (+974)'}, 188 + {code2: 'RE', name: 'Réunion (+262)'}, 189 + {code2: 'RO', name: 'Romania (+40)'}, 190 + {code2: 'RU', name: 'Russian Federation (+7)'}, 191 + {code2: 'RW', name: 'Rwanda (+250)'}, 192 + {code2: 'BL', name: 'Saint Barthélemy (+590)'}, 193 + {code2: 'SH', name: 'Saint Helena, Ascension and Tristan da Cunha (+290)'}, 194 + {code2: 'KN', name: 'Saint Kitts and Nevis (+1)'}, 195 + {code2: 'LC', name: 'Saint Lucia (+1)'}, 196 + {code2: 'MF', name: 'Saint Martin (French part) (+590)'}, 197 + {code2: 'PM', name: 'Saint Pierre and Miquelon (+508)'}, 198 + {code2: 'VC', name: 'Saint Vincent and the Grenadines (+1)'}, 199 + {code2: 'WS', name: 'Samoa (+685)'}, 200 + {code2: 'SM', name: 'San Marino (+378)'}, 201 + {code2: 'ST', name: 'Sao Tome and Principe (+239)'}, 202 + {code2: 'SA', name: 'Saudi Arabia (+966)'}, 203 + {code2: 'SN', name: 'Senegal (+221)'}, 204 + {code2: 'RS', name: 'Serbia (+381)'}, 205 + {code2: 'SC', name: 'Seychelles (+248)'}, 206 + {code2: 'SL', name: 'Sierra Leone (+232)'}, 207 + {code2: 'SG', name: 'Singapore (+65)'}, 208 + {code2: 'SX', name: 'Sint Maarten (Dutch part) (+1)'}, 209 + {code2: 'SK', name: 'Slovakia (+421)'}, 210 + {code2: 'SI', name: 'Slovenia (+386)'}, 211 + {code2: 'SB', name: 'Solomon Islands (+677)'}, 212 + {code2: 'SO', name: 'Somalia (+252)'}, 213 + {code2: 'ZA', name: 'South Africa (+27)'}, 214 + {code2: 'SS', name: 'South Sudan (+211)'}, 215 + {code2: 'ES', name: 'Spain (+34)'}, 216 + {code2: 'LK', name: 'Sri Lanka (+94)'}, 217 + {code2: 'SD', name: 'Sudan (+249)'}, 218 + {code2: 'SR', name: 'Suriname (+597)'}, 219 + {code2: 'SJ', name: 'Svalbard and Jan Mayen (+47)'}, 220 + {code2: 'SE', name: 'Sweden (+46)'}, 221 + {code2: 'CH', name: 'Switzerland (+41)'}, 222 + {code2: 'SY', name: 'Syrian Arab Republic (+963)'}, 223 + {code2: 'TW', name: 'Taiwan, Province of China (+886)'}, 224 + {code2: 'TJ', name: 'Tajikistan (+992)'}, 225 + {code2: 'TZ', name: 'Tanzania, United Republic of (+255)'}, 226 + {code2: 'TH', name: 'Thailand (+66)'}, 227 + {code2: 'TL', name: 'Timor-Leste (+670)'}, 228 + {code2: 'TG', name: 'Togo (+228)'}, 229 + {code2: 'TK', name: 'Tokelau (+690)'}, 230 + {code2: 'TO', name: 'Tonga (+676)'}, 231 + {code2: 'TT', name: 'Trinidad and Tobago (+1)'}, 232 + {code2: 'TN', name: 'Tunisia (+216)'}, 233 + {code2: 'TR', name: 'Türkiye (+90)'}, 234 + {code2: 'TM', name: 'Turkmenistan (+993)'}, 235 + {code2: 'TC', name: 'Turks and Caicos Islands (+1)'}, 236 + {code2: 'TV', name: 'Tuvalu (+688)'}, 237 + {code2: 'UG', name: 'Uganda (+256)'}, 238 + {code2: 'UA', name: 'Ukraine (+380)'}, 239 + {code2: 'AE', name: 'United Arab Emirates (+971)'}, 240 + {code2: 'US', name: 'United States of America (+1)'}, 241 + {code2: 'UY', name: 'Uruguay (+598)'}, 242 + {code2: 'UZ', name: 'Uzbekistan (+998)'}, 243 + {code2: 'VU', name: 'Vanuatu (+678)'}, 244 + {code2: 'VE', name: 'Venezuela (Bolivarian Republic of) (+58)'}, 245 + {code2: 'VN', name: 'Viet Nam (+84)'}, 246 + {code2: 'VI', name: 'Virgin Islands (+1)'}, 247 + {code2: 'VG', name: 'Virgin Islands (British) (+1)'}, 248 + {code2: 'WF', name: 'Wallis and Futuna (+681)'}, 249 + {code2: 'EH', name: 'Western Sahara (+212)'}, 250 + {code2: 'YE', name: 'Yemen (+967)'}, 251 + {code2: 'ZM', name: 'Zambia (+260)'}, 252 + {code2: 'ZW', name: 'Zimbabwe (+263)'}, 253 + ]
+107 -5
src/view/com/auth/create/Step2.tsx
··· 5 5 TouchableWithoutFeedback, 6 6 View, 7 7 } from 'react-native' 8 + import RNPickerSelect from 'react-native-picker-select' 8 9 import { 9 10 CreateAccountState, 10 11 CreateAccountDispatch, ··· 17 18 import {TextInput} from '../util/TextInput' 18 19 import {Button} from '../../util/forms/Button' 19 20 import {ErrorMessage} from 'view/com/util/error/ErrorMessage' 20 - import {isWeb} from 'platform/detection' 21 + import {isAndroid, isWeb} from 'platform/detection' 21 22 import {Trans, msg} from '@lingui/macro' 22 23 import {useLingui} from '@lingui/react' 23 24 import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' 24 25 import parsePhoneNumber from 'libphonenumber-js' 26 + import {COUNTRY_CODES} from '#/lib/country-codes' 27 + import { 28 + FontAwesomeIcon, 29 + FontAwesomeIconStyle, 30 + } from '@fortawesome/react-native-fontawesome' 25 31 26 32 export function Step2({ 27 33 uiState, ··· 37 43 const onPressRequest = React.useCallback(() => { 38 44 if ( 39 45 uiState.verificationPhone.length >= 9 && 40 - parsePhoneNumber(uiState.verificationPhone, 'US') 46 + parsePhoneNumber(uiState.verificationPhone, uiState.phoneCountry) 41 47 ) { 42 48 requestVerificationCode({uiState, uiDispatch, _}) 43 49 } else { 44 50 uiDispatch({ 45 51 type: 'set-error', 46 52 value: _( 47 - msg`There's something wrong with this number. Please include your country and/or area code!`, 53 + msg`There's something wrong with this number. Please choose your country and enter your full phone number!`, 48 54 ), 49 55 }) 50 56 } ··· 59 65 uiState.hasRequestedVerificationCode 60 66 ? parsePhoneNumber( 61 67 uiState.verificationPhone, 62 - 'US', 68 + uiState.phoneCountry, 63 69 )?.formatInternational() 64 70 : '', 65 - [uiState.hasRequestedVerificationCode, uiState.verificationPhone], 71 + [ 72 + uiState.hasRequestedVerificationCode, 73 + uiState.verificationPhone, 74 + uiState.phoneCountry, 75 + ], 66 76 ) 67 77 68 78 return ( ··· 71 81 72 82 {!uiState.hasRequestedVerificationCode ? ( 73 83 <> 84 + <View style={s.pb10}> 85 + <Text 86 + type="md-medium" 87 + style={[pal.text, s.mb2]} 88 + nativeID="phoneCountry"> 89 + <Trans>Country</Trans> 90 + </Text> 91 + <View 92 + style={[ 93 + {position: 'relative'}, 94 + isAndroid && { 95 + borderWidth: 1, 96 + borderColor: pal.border.borderColor, 97 + borderRadius: 4, 98 + }, 99 + ]}> 100 + <RNPickerSelect 101 + placeholder={{}} 102 + value={uiState.phoneCountry} 103 + onValueChange={value => 104 + uiDispatch({type: 'set-phone-country', value}) 105 + } 106 + items={COUNTRY_CODES.filter(l => Boolean(l.code2)).map(l => ({ 107 + label: l.name, 108 + value: l.code2, 109 + key: l.code2, 110 + }))} 111 + style={{ 112 + inputAndroid: { 113 + backgroundColor: pal.view.backgroundColor, 114 + color: pal.text.color, 115 + fontSize: 21, 116 + letterSpacing: 0.5, 117 + fontWeight: '500', 118 + paddingHorizontal: 14, 119 + paddingVertical: 8, 120 + borderRadius: 4, 121 + }, 122 + inputIOS: { 123 + backgroundColor: pal.view.backgroundColor, 124 + color: pal.text.color, 125 + fontSize: 14, 126 + letterSpacing: 0.5, 127 + fontWeight: '500', 128 + paddingHorizontal: 14, 129 + paddingVertical: 8, 130 + borderWidth: 1, 131 + borderColor: pal.border.borderColor, 132 + borderRadius: 4, 133 + }, 134 + inputWeb: { 135 + // @ts-ignore web only 136 + cursor: 'pointer', 137 + '-moz-appearance': 'none', 138 + '-webkit-appearance': 'none', 139 + appearance: 'none', 140 + outline: 0, 141 + borderWidth: 1, 142 + borderColor: pal.border.borderColor, 143 + backgroundColor: pal.view.backgroundColor, 144 + color: pal.text.color, 145 + fontSize: 14, 146 + letterSpacing: 0.5, 147 + fontWeight: '500', 148 + paddingHorizontal: 14, 149 + paddingVertical: 8, 150 + borderRadius: 4, 151 + }, 152 + }} 153 + accessibilityLabel={_(msg`Select your phone's country`)} 154 + accessibilityHint="" 155 + accessibilityLabelledBy="phoneCountry" 156 + /> 157 + <View 158 + style={{ 159 + position: 'absolute', 160 + top: 1, 161 + right: 1, 162 + bottom: 1, 163 + width: 40, 164 + pointerEvents: 'none', 165 + alignItems: 'center', 166 + justifyContent: 'center', 167 + }}> 168 + <FontAwesomeIcon 169 + icon="chevron-down" 170 + style={pal.text as FontAwesomeIconStyle} 171 + /> 172 + </View> 173 + </View> 174 + </View> 175 + 74 176 <View style={s.pb20}> 75 177 <Text 76 178 type="md-medium"
+11 -2
src/view/com/auth/create/state.ts
··· 14 14 import {DispatchContext as OnboardingDispatchContext} from '#/state/shell/onboarding' 15 15 import {ApiContext as SessionApiContext} from '#/state/session' 16 16 import {DEFAULT_SERVICE} from '#/lib/constants' 17 - import parsePhoneNumber from 'libphonenumber-js' 17 + import parsePhoneNumber, {CountryCode} from 'libphonenumber-js' 18 18 19 19 export type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema 20 20 const DEFAULT_DATE = new Date(Date.now() - 60e3 * 60 * 24 * 365 * 20) // default to 20 years ago ··· 29 29 | {type: 'set-invite-code'; value: string} 30 30 | {type: 'set-email'; value: string} 31 31 | {type: 'set-password'; value: string} 32 + | {type: 'set-phone-country'; value: CountryCode} 32 33 | {type: 'set-verification-phone'; value: string} 33 34 | {type: 'set-verification-code'; value: string} 34 35 | {type: 'set-has-requested-verification-code'; value: boolean} ··· 48 49 inviteCode: string 49 50 email: string 50 51 password: string 52 + phoneCountry: CountryCode 51 53 verificationPhone: string 52 54 verificationCode: string 53 55 hasRequestedVerificationCode: boolean ··· 75 77 inviteCode: '', 76 78 email: '', 77 79 password: '', 80 + phoneCountry: 'US', 78 81 verificationPhone: '', 79 82 verificationCode: '', 80 83 hasRequestedVerificationCode: false, ··· 97 100 uiDispatch: CreateAccountDispatch 98 101 _: I18nContext['_'] 99 102 }) { 100 - const phoneNumber = parsePhoneNumber(uiState.verificationPhone, 'US')?.number 103 + const phoneNumber = parsePhoneNumber( 104 + uiState.verificationPhone, 105 + uiState.phoneCountry, 106 + )?.number 101 107 if (!phoneNumber) { 102 108 return 103 109 } ··· 260 266 } 261 267 case 'set-password': { 262 268 return compute({...state, password: action.value}) 269 + } 270 + case 'set-phone-country': { 271 + return compute({...state, phoneCountry: action.value}) 263 272 } 264 273 case 'set-verification-phone': { 265 274 return compute({