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
}