It's an international phone input with country selection and phone mask for React Native.
This package is a fork of the original react-native-intl-phone-input
with several modifications and improvements. We've made changes to enhance functionality, improve performance, and add new features. As a result, we're continuing with a new version under this new package name.
-
Handling Default Country:
- The code now checks if a
defaultCountry
prop is provided. If not, it uses the country with code 'TR' as the default. - It initializes the state with the default country's details like dial code, flag, and mask.
- The code now checks if a
-
Input Mask and Phone Number Validation:
- The
onChangeText
function handles user input in the phone number field. - It counts the number of digits ('9') in the mask and validates the entered phone number length against the mask.
- It calls the
onChangePropText
function to update the parent component with the formatted phone number and validation status.
- The
-
Country Selection Modal:
- The code updates the modal visibility based on the
disableCountryChange
prop. Iftrue
, the modal won't be shown. - Selecting a country in the modal updates the state with the selected country's details and calls the
onSelectCountry
prop function if provided. - In case of errors, it falls back to the default country.
- The code updates the modal visibility based on the
-
Country Filtering:
- The
filterCountries
function filters the list of countries based on the search term entered by the user. - It searches by country name, dial code, or code (uppercase).
- The
-
Minor UI Changes:
- The code removes some commented-out styles, likely for the border color of the country modal items.
import CountryPhonePicker from "rn-country-phone-picker";
<CountryPhonePicker
showCountryBox={true} // Display the country selection box
showInput={false} // Hide the phone number input field
phoneInputStyle={styles.selectBox} // Style for the selection box
containerStyle={styles.countryBox} // Style for the entire country box
flagStyle={styles.countryCode} // Style for the country flag
dialCodeTextStyle={styles.callingCode} // Style for the dial code text
defaultCountry={countryCode} // Set the default country based on `countryCode`
lang={locale} // Set the language for country names based on `locale`
filterText={I18n.t("countrySearchBoxPlaceholder", { locale })} // Placeholder text for the country search box (localized)
closeText={I18n.t("countrySearchBoxCloseText", { locale })} // Text for the close button (localized)
placeholder={I18n.t("countryBoxPlaceholder", { locale })} // Placeholder text for the selection box (localized)
onSelectCountry={onSelect} // Callback function for country selection
/>
<CountryPhonePicker
showInput={true} // Display the phone number input field
showCountryBox={false} // Hide the country selection box
inputProps={{
autoFocus: !!(callingCode && countryCode), // Set auto-focus if dial code and country code are provided
editable: !!(callingCode && countryCode), // Enable editing only if dial code and country code are provided
}}
numberOfLines={1} // Limit to a single line
placeholder={I18n.t("phoneNumberPlaceholder", { locale })} // Localized placeholder text (e.g., "Phone number")
phoneInputStyle={styles.input} // Style for the input field (using `styles`)
defaultCountry={countryCode} // Set the default country based on `countryCode`
value={phoneNumber} // Set the initial phone number value
onChangeText={onChangeText} // Callback function for phone number changes
/>
Overall, the changes improve the functionality and error handling of the CountryPhonePicker
component. It provides a better user experience for entering and managing international phone numbers.
Install the package via npm:
npm install rn-country-phone-picker
Import the component:
import CountryPhonePicker from 'rn-country-phone-picker';
Use the component:
onChangeText = ({dialCode, unmaskedPhoneNumber, phoneNumber, isVerified}) => {
console.log(dialCode, unmaskedPhoneNumber, phoneNumber, isVerified);
};
render() {
return (
<SafeAreaView>
<CountryPhonePicker
onChangeText={this.onChangeText}
defaultCountry="TR"
renderAction={() => <Text>XX</Text>}
/>
</SafeAreaView>
);
}
renderCustomModal = (modalVisible, countries, onCountryChange) => (
<Modal visible={modalVisible}>
<SafeAreaView style={{ flex: 1 }}>
<View>
<View>
<TextInput placeholder="Search" />
<Text>๐</Text>
</View>
<FlatList
style={{ flex: 1 }}
data={countries}
keyExtractor={(item, index) => index.toString()}
renderItem={({ item }) => (
<TouchableWithoutFeedback onPress={() => onCountryChange(item.code)}>
<Text>{item['your language code here for example tr']}</Text>
</TouchableWithoutFeedback>
)}
/>
</View>
<TouchableOpacity onPress={() => this.phoneInput.hideModal()}>
<Text>CLOSE</Text>
</TouchableOpacity>
</SafeAreaView>
</Modal>
)
render() {
return (
<CountryPhonePicker
ref={(ref) => this.phoneInput = ref}
customModal={this.renderCustomModal}
defaultCountry="TR"
lang="TR"
/>
);
}
Code | Language |
---|---|
TR | Turkish |
LT | Lithuanian |
EN | English |
RU | Russian |
Prop Name | Type | Default | Description |
---|---|---|---|
lang | String | Translate country name on modal | |
placeholder | String | Phone input placeholder | |
defaultCountry | String | TR | Default country code |
mask | String | Custom mask for phone number | |
onChangeText | Function | Callback when input text changes | |
customModal | Function | Generate custom modal for country selection | |
phoneInputStyle | Style | Style for the phone input TextInput | |
containerStyle | Style | Style for the container | |
dialCodeTextStyle | Style | Style for the dial code text | |
flagStyle | Style | Style for the country flag | |
modalContainer | Style | Style for the modal's SafeAreaView | |
filterInputStyle | Style | Style for the filter input in modal | |
closeButtonStyle | Style | Style for the close button text | |
modalCountryItemCountryNameStyle | Style | Style for country names in modal | |
filterText | String | Filter | Placeholder text for filter input |
closeText | String | CLOSE | Text for close button |
disableCountryChange | Boolean | false | Disable country selection |
renderAction | Function | Render component to the right of phone input | |
placeholderTextColor | String | black | Color for placeholder text |
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License.