import React, { useEffect, useRef, useState } from 'react'; import { StyleSheet, View } from 'react-native'; import PhoneInput from 'react-native-phone-number-input'; import { useLanguage, useConfig } from 'ordering-components/native'; import { useTheme } from 'styled-components/native'; import { Wrapper } from './styles'; import { OText, OIcon } from '../shared'; import { PhoneInputParams } from '../../types'; import { transformCountryCode, findExitingCode } from '../../utils'; export const PhoneInputNumber = (props: PhoneInputParams) => { const { data, handleData, defaultValue, defaultCode, forwardRef, textInputProps, flagProps, onSubmitEditing, } = props; const theme = useTheme(); const [, t] = useLanguage(); const [{ configs }] = useConfig(); const phoneInput = useRef(null); const [userphoneNumber, setUserphoneNumber] = useState(''); const handleChangeNumber = (number: any) => { setUserphoneNumber(number); }; useEffect(() => { if ((defaultValue && userphoneNumber) || !defaultValue) { if (userphoneNumber === '') return; if (userphoneNumber) { const checkValid = phoneInput.current?.isValidNumber(userphoneNumber); const callingCode = phoneInput.current?.getCallingCode(); const formattedNumber = phoneInput.current?.getNumberAfterPossiblyEliminatingZero(); const regex = /^[0-9]*$/; const cellphone = userphoneNumber.slice(0, 0) + userphoneNumber.slice(1, userphoneNumber.length); const validNumber = regex.test(cellphone); if ((!checkValid && formattedNumber?.number) || !validNumber) { handleData && handleData({ ...data, error: t( 'INVALID_ERROR_PHONE_NUMBER', 'The Phone Number field is invalid', ), }); return; } handleData && handleData({ ...data, error: '', phone: { country_phone_code: callingCode, cellphone: formattedNumber?.number, }, }); } else { handleData && handleData({ ...data, error: '', phone: { country_phone_code: null, cellphone: null, }, }); } } }, [userphoneNumber]); const style = StyleSheet.create({ input: { backgroundColor: theme.colors.white, borderRadius: 7.6, borderWidth: 1, borderColor: theme.colors.inputSignup, paddingVertical: 0, paddingLeft: 35, flexGrow: 2, flex: 1, height: 50, }, }); return ( handleChangeNumber(text)} countryPickerProps={{ withAlphaFilter: false, withFilter: false, closeButtonImageStyle: { width: 15, height: 15 }, closeButtonImage: theme.images.general.close, }} textContainerStyle={style.input} codeTextStyle={{ display: 'none' }} placeholder={t('PHONE_NUMBER', 'Phone number')} textInputProps={{ selectionColor: theme.colors.primary, placeholderTextColor: theme.colors.arrowColor, blurOnSubmit: true, onSubmitEditing, autoCompleteType: 'tel', // @ts-ignore ref: forwardRef, color: theme.colors.textGray, ...textInputProps, }} renderDropdownImage={ } flagButtonStyle={flagProps} /> {!!data?.error && ( {data.error} )} ); };