Skip to content

Commit 6b42d4b

Browse files
Merge pull request #102 from ebaynaud/EBA_AllowLocalNumbers
Allow local numbers in addition to numbers including area code
2 parents 73455a6 + 1b47c70 commit 6b42d4b

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

lib/index.js

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ export default class PhoneInput extends Component {
3333
iso2: initialCountry,
3434
disabled,
3535
formattedNumber: countryData ? `+${countryData.dialCode}` : "",
36-
value: null
36+
value: null,
37+
inputValue: "",
3738
};
3839
}
3940

@@ -83,7 +84,7 @@ export default class PhoneInput extends Component {
8384

8485
getCountryCode() {
8586
const countryData = PhoneNumber.getCountryDataByCode(this.state.iso2);
86-
return countryData.dialCode;
87+
return countryData ? countryData.dialCode : null;
8788
}
8889

8990
getAllCountries() {
@@ -99,7 +100,7 @@ export default class PhoneInput extends Component {
99100
}
100101

101102
getValue() {
102-
return this.state.formattedNumber;
103+
return this.state.formattedNumber.replace(/\s/g,'');
103104
}
104105

105106
getNumberType() {
@@ -123,6 +124,7 @@ export default class PhoneInput extends Component {
123124
formattedNumber: `+${countryData.dialCode}`
124125
},
125126
() => {
127+
this.updateFlagAndFormatNumber(this.state.inputValue)
126128
if (this.props.onSelectCountry) this.props.onSelectCountry(iso2);
127129
}
128130
);
@@ -131,6 +133,7 @@ export default class PhoneInput extends Component {
131133
}
132134

133135
isValidNumber() {
136+
if (this.state.inputValue.length < 3) return false;
134137
return PhoneNumber.isValidNumber(
135138
this.state.formattedNumber,
136139
this.state.iso2
@@ -145,17 +148,19 @@ export default class PhoneInput extends Component {
145148

146149
updateFlagAndFormatNumber(number, actionAfterSetState = null) {
147150
const { allowZeroAfterCountryCode, initialCountry } = this.props;
148-
let iso2 = initialCountry;
149-
let phoneNumber = number;
150-
151+
let iso2 = this.getISOCode() || initialCountry;
152+
let formattedPhoneNumber = number;
151153
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);
157162
}
158-
this.setState({ iso2, formattedNumber: this.format(phoneNumber) }, actionAfterSetState);
163+
this.setState({ iso2, formattedNumber: formattedPhoneNumber, inputValue: number }, actionAfterSetState);
159164
}
160165

161166
possiblyEliminateZeroAfterCountryCode(number) {
@@ -174,7 +179,7 @@ export default class PhoneInput extends Component {
174179
}
175180

176181
render() {
177-
const { iso2, formattedNumber, disabled } = this.state;
182+
const { iso2, inputValue, disabled } = this.state;
178183
const TextComponent = this.props.textComponent || TextInput;
179184
return (
180185
<View style={[styles.container, this.props.style]}>
@@ -201,7 +206,7 @@ export default class PhoneInput extends Component {
201206
}}
202207
keyboardType="phone-pad"
203208
underlineColorAndroid="rgba(0,0,0,0)"
204-
value={formattedNumber}
209+
value={inputValue}
205210
{...this.props.textProps}
206211
/>
207212
</View>

0 commit comments

Comments
 (0)