@@ -33,7 +33,8 @@ export default class PhoneInput extends Component {
33
33
iso2 : initialCountry ,
34
34
disabled,
35
35
formattedNumber : countryData ? `+${ countryData . dialCode } ` : "" ,
36
- value : null
36
+ value : null ,
37
+ inputValue : "" ,
37
38
} ;
38
39
}
39
40
@@ -83,7 +84,7 @@ export default class PhoneInput extends Component {
83
84
84
85
getCountryCode ( ) {
85
86
const countryData = PhoneNumber . getCountryDataByCode ( this . state . iso2 ) ;
86
- return countryData . dialCode ;
87
+ return countryData ? countryData . dialCode : null ;
87
88
}
88
89
89
90
getAllCountries ( ) {
@@ -99,7 +100,7 @@ export default class PhoneInput extends Component {
99
100
}
100
101
101
102
getValue ( ) {
102
- return this . state . formattedNumber ;
103
+ return this . state . formattedNumber . replace ( / \s / g , '' ) ;
103
104
}
104
105
105
106
getNumberType ( ) {
@@ -123,6 +124,7 @@ export default class PhoneInput extends Component {
123
124
formattedNumber : `+${ countryData . dialCode } `
124
125
} ,
125
126
( ) => {
127
+ this . updateFlagAndFormatNumber ( this . state . inputValue )
126
128
if ( this . props . onSelectCountry ) this . props . onSelectCountry ( iso2 ) ;
127
129
}
128
130
) ;
@@ -131,6 +133,7 @@ export default class PhoneInput extends Component {
131
133
}
132
134
133
135
isValidNumber ( ) {
136
+ if ( this . state . inputValue . length < 3 ) return false ;
134
137
return PhoneNumber . isValidNumber (
135
138
this . state . formattedNumber ,
136
139
this . state . iso2
@@ -145,17 +148,19 @@ export default class PhoneInput extends Component {
145
148
146
149
updateFlagAndFormatNumber ( number , actionAfterSetState = null ) {
147
150
const { allowZeroAfterCountryCode, initialCountry } = this . props ;
148
- let iso2 = initialCountry ;
149
- let phoneNumber = number ;
150
-
151
+ let iso2 = this . getISOCode ( ) || initialCountry ;
152
+ let formattedPhoneNumber = number ;
151
153
if ( number ) {
152
- if ( phoneNumber [ 0 ] !== "+" ) phoneNumber = `+${ phoneNumber } ` ;
153
- phoneNumber = allowZeroAfterCountryCode
154
- ? phoneNumber
155
- : this . possiblyEliminateZeroAfterCountryCode ( phoneNumber ) ;
156
- iso2 = PhoneNumber . getCountryCodeOfNumber ( phoneNumber ) ;
154
+ const countryCode = this . getCountryCode ( ) ;
155
+ if ( formattedPhoneNumber [ 0 ] !== "+" && countryCode !== null ) {
156
+ formattedPhoneNumber = '+' + countryCode . toString ( ) + formattedPhoneNumber . toString ( ) ;
157
+ }
158
+ formattedPhoneNumber = allowZeroAfterCountryCode
159
+ ? formattedPhoneNumber
160
+ : this . possiblyEliminateZeroAfterCountryCode ( formattedPhoneNumber ) ;
161
+ iso2 = PhoneNumber . getCountryCodeOfNumber ( formattedPhoneNumber ) ;
157
162
}
158
- this . setState ( { iso2, formattedNumber : this . format ( phoneNumber ) } , actionAfterSetState ) ;
163
+ this . setState ( { iso2, formattedNumber : formattedPhoneNumber , inputValue : number } , actionAfterSetState ) ;
159
164
}
160
165
161
166
possiblyEliminateZeroAfterCountryCode ( number ) {
@@ -174,7 +179,7 @@ export default class PhoneInput extends Component {
174
179
}
175
180
176
181
render ( ) {
177
- const { iso2, formattedNumber , disabled } = this . state ;
182
+ const { iso2, inputValue , disabled } = this . state ;
178
183
const TextComponent = this . props . textComponent || TextInput ;
179
184
return (
180
185
< View style = { [ styles . container , this . props . style ] } >
@@ -201,7 +206,7 @@ export default class PhoneInput extends Component {
201
206
} }
202
207
keyboardType = "phone-pad"
203
208
underlineColorAndroid = "rgba(0,0,0,0)"
204
- value = { formattedNumber }
209
+ value = { inputValue }
205
210
{ ...this . props . textProps }
206
211
/>
207
212
</ View >
0 commit comments