import React, { useEffect, useState } from 'react'; import { TouchableOpacity, View } from 'react-native'; import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons'; import { UDContainer, UDHeader, UDForm, UDInfo, EditBtn } from './styles'; import { UserFormDetails as UserFormController, useLanguage, useSession, ToastType, useToast } from 'ordering-components/native'; import { useTheme } from 'styled-components/native'; import { OIcon, OText, OModal } from '../shared'; import { VerifyPhone } from '../VerifyPhone'; import Spinner from 'react-native-loading-spinner-overlay'; import { UserFormDetailsUI } from '../UserFormDetails'; import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'; const UserDetailsUI = (props: any) => { const { isEdit, formState, cleanFormState, requiredFields, onClose, cartStatus, toggleIsEdit, validationFields, isUserDetailsEdit, phoneUpdate, togglePhoneUpdate, isCheckout, handleSendVerifyCode, verifyPhoneState, setFormState, setIsOpen, isCheckoutPlace } = props const theme = useTheme(); const [, t] = useLanguage() const [{ user }] = useSession() const [, { showToast }] = useToast(); const userData = props.userData || (!formState.result.error && formState.result?.result) || user const [isModalVisible, setIsModalVisible] = useState(false); const [isSubmit, setIsSubmit] = useState(false) const [willVerifyOtpState, setWillVerifyOtpState] = useState(false); const [checkPhoneCodeState, setCheckPhoneCodeState] = useState({ loading: false, result: { error: false } }) const [phoneInputData, setPhoneInputData] = useState({ error: '', phone: { country_phone_code: null, cellphone: null, }, }); useEffect(() => { if (isUserDetailsEdit) { !isEdit && toggleIsEdit() } }, [isUserDetailsEdit]) const toggleEditState = () => { toggleIsEdit() cleanFormState({ changes: {} }) } useEffect(() => { if (isSubmit && !isEdit && requiredFields) { onClose && onClose() } }, [isSubmit, requiredFields, isEdit]) useEffect(() => { if (user?.cellphone && !user?.country_phone_code) { togglePhoneUpdate(true) } else { togglePhoneUpdate(false) } }, [user?.country_phone_code]) const handleVerifyCodeClick = () => { if (formState?.changes?.cellphone && formState?.changes?.country_phone_code) { const { cellphone, country_phone_code: countryPhoneCode } = formState?.changes setPhoneInputData({ error: '', phone: { country_phone_code: countryPhoneCode, cellphone: cellphone, }, }); handleSendVerifyCode({ cellphone: cellphone, country_phone_code: countryPhoneCode }) } } const handleSendPhoneCode = (values: any) => { setWillVerifyOtpState(false) setIsModalVisible(false) setFormState({ ...formState, changes: { ...formState?.changes, verification_code: values?.code } }) } useEffect(() => { if (willVerifyOtpState) handleVerifyCodeClick() }, [willVerifyOtpState]) useEffect(() => { if (verifyPhoneState && !verifyPhoneState?.loading) { if (verifyPhoneState.result?.error) { const message = typeof verifyPhoneState?.result?.result === 'string' ? verifyPhoneState?.result?.result : verifyPhoneState?.result?.result[0] verifyPhoneState.result?.result && showToast( ToastType.Error, message ) setWillVerifyOtpState(false) return } const okResult = verifyPhoneState.result?.result === 'OK' if (okResult) { !isModalVisible && setIsModalVisible(true) setWillVerifyOtpState(false) } } }, [verifyPhoneState]) return ( <> {(validationFields.loading || formState.loading) && ( )} {!(validationFields.loading || formState.loading) && ( {props.HeaderTitle ?? ( {t('CUSTOMER_DETAILS', 'Customer Details')} )} {cartStatus !== 2 && !isCheckoutPlace && ( !isEdit ? ( toggleIsEdit()} activeOpacity={0.7}> ) : ( toggleEditState()} activeOpacity={0.7}> ) )} {!isEdit ? ( {userData?.name} {userData?.middle_name} {userData?.lastname} {userData?.second_lastname} {userData?.guest_id ? userData?.guest_email : userData?.email} {!!((userData?.cellphone ?? userData?.guest_cellphone) || (user?.cellphone ?? user?.guest_cellphone)) && ( <> {(userData?.country_phone_code) && `+${(userData?.country_phone_code)} `}{(userData?.guest_id ? user?.guest_cellphone : userData?.cellphone)} {!!phoneUpdate && ( {t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number')} )} )} ) : ( )} )} setIsModalVisible(false)} entireModal > setIsModalVisible(false)} /> ) } export const UserDetails = (props: any) => { const userDetailsProps = { ...props, UIComponent: UserDetailsUI } return }