import React, { FC, useEffect, useMemo, useRef } from 'react' import { Text, View } from 'react-native' import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view' import { TextField } from '../../packages/rn-material-ui-textfield' import { Button, Checkbox, Input, RadioButton } from '../../components' import { IResaleTicketsViewProps, IResaleTicketsViewTexts, ResaleToWhomFieldIdEnum, } from './types' const ResaleTicketsView: FC = ({ styles, isDataValid, resaleToWhomData, onResaleToWhomDataChanged, someoneDataErrors, onPressResaleTickets, ticket, isLoading, texts, isTicketsTypeActive, }) => { //#region Texts const txt: IResaleTicketsViewTexts = { title: texts?.title || 'Resale tickets', orderDetails: { title: texts?.orderDetails?.title || 'Order details', eventName: texts?.orderDetails?.eventName || 'Event', orderedBy: texts?.orderDetails?.orderedBy || 'Ordered By', orderId: texts?.orderDetails?.orderId || 'Order ID', }, sellToWhom: { title: texts?.sellToWhom?.title || 'Sell to whom?', anyone: texts?.sellToWhom?.anyone || 'I will sell my ticket to anyone who wants to buy it', friend: texts?.sellToWhom?.friend || 'I will sell my ticket to someone I know', }, terms: { title: texts?.terms?.title || 'Terms of resale', paragraph1: texts?.terms?.paragraph1 || 'I confirm that I want to sell this ticket and that, if someone chooses to buy it, I will no longer own it or have the right to ask for it back. \n', paragraph2_1: texts?.terms?.paragraph2_1 || 'I also understand that, if no one chooses to buy it, it remains my property, is valid for entry to', paragraph2_2: texts?.terms?.paragraph2_2 || 'and I will not receive any refund.', paragraph3_1: texts?.terms?.paragraph3_1 || 'If my ticket is sold, the original card I used to buy my ticket will be refunded with the original amount paid, minus a small handling fee of', paragraph3_2: texts?.terms?.paragraph3_2 || ', and that any existing refunds due to me for referring sales for this event are no longer valid.', }, agree: texts?.agree || 'I agree', friendForm: { firstName: texts?.friendForm?.firstName || 'First Name', lastName: texts?.friendForm?.lastName || 'Last Name', email: texts?.friendForm?.email || 'Email Address', emailConfirm: texts?.friendForm?.emailConfirm || 'Confirm Email Address', }, resaleTicketsButton: texts?.resaleTicketsButton || 'Resale Ticket', } //#endregion //#region Refs const firstNameRef = useRef(null) const lastNameRef = useRef(null) const emailRef = useRef(null) const confirmEmailRef = useRef(null) //#endregion //#region Styles const ticketBuyerFormStyles = styles?.ticketBuyerForm const ticketOrderDetailsStyles = styles?.ticketOrderDetails const termsStyles = styles?.terms const buttonStyles = !isDataValid ? styles?.resaleTicketsButtonDisabled : styles?.resaleTicketsButton //#endregion const { someoneData: { firstName, lastName, email, emailConfirm }, toWhom, isTermsAgreed, } = resaleToWhomData const { firstNameError, lastNameError, emailError, emailConfirmError } = someoneDataErrors const Terms = useMemo( () => ( {txt.terms?.title} {txt.terms?.paragraph1} {txt.terms?.paragraph2_1}{' '} {ticket.eventName}{' '} {txt.terms?.paragraph2_2} {'\n'} {txt.terms?.paragraph3_1}{' '} {ticket.currency} {ticket.resaleFeeAmount} {txt.terms?.paragraph3_2} onResaleToWhomDataChanged(ResaleToWhomFieldIdEnum.terms)} isActive={isTermsAgreed} styles={styles?.termsCheckbox} text={txt.agree} /> ), [ isTermsAgreed, onResaleToWhomDataChanged, styles?.termsCheckbox, termsStyles?.item, termsStyles?.itemBold, termsStyles?.rootContainer, termsStyles?.title, ticket.currency, ticket.eventName, ticket.resaleFeeAmount, txt.agree, txt.terms?.paragraph1, txt.terms?.paragraph2_1, txt.terms?.paragraph2_2, txt.terms?.paragraph3_1, txt.terms?.paragraph3_2, txt.terms?.title, ] ) const OrderDetails = useMemo( () => ( {txt.orderDetails?.title} {txt.orderDetails?.eventName} {ticket.eventName} {txt.orderDetails?.orderedBy} {ticket.holderName} {txt.orderDetails?.orderId} {ticket.hash} ), [ ticket.eventName, ticket.hash, ticket.holderName, ticketOrderDetailsStyles?.label, ticketOrderDetailsStyles?.rootContainer, ticketOrderDetailsStyles?.title, ticketOrderDetailsStyles?.value, txt.orderDetails?.eventName, txt.orderDetails?.orderId, txt.orderDetails?.orderedBy, txt.orderDetails?.title, ] ) const TicketBuyerForm = useMemo( () => ( {txt.sellToWhom?.title} {isTicketsTypeActive && ( onResaleToWhomDataChanged(ResaleToWhomFieldIdEnum.radioIndex, 0) } /> )} {toWhom === 'friend' && ( onResaleToWhomDataChanged(ResaleToWhomFieldIdEnum.firstName, text) } styles={ticketBuyerFormStyles?.inputs} error={firstNameError} blurOnSubmit={false} //@ts-ignore onSubmitEditing={lastNameRef.current?.focus} returnKeyType="next" /> onResaleToWhomDataChanged(ResaleToWhomFieldIdEnum.lastName, text) } styles={ticketBuyerFormStyles?.inputs} error={lastNameError} blurOnSubmit={false} onSubmitEditing={() => { if (emailRef.current) { //@ts-ignore emailRef.current.focus() } }} returnKeyType="next" /> onResaleToWhomDataChanged(ResaleToWhomFieldIdEnum.email, text) } styles={ticketBuyerFormStyles?.inputs} error={emailError} blurOnSubmit={false} onSubmitEditing={() => { if (confirmEmailRef.current) { //@ts-ignore confirmEmailRef.current.focus() } }} returnKeyType="next" /> onResaleToWhomDataChanged(ResaleToWhomFieldIdEnum.emailConfirm, text) } styles={ticketBuyerFormStyles?.inputs} error={emailConfirmError} blurOnSubmit={true} returnKeyType="go" /> )} {isTicketsTypeActive && ( onResaleToWhomDataChanged(ResaleToWhomFieldIdEnum.radioIndex, 1) } /> )} ), [ email, emailConfirm, emailConfirmError, emailError, firstName, firstNameError, isTicketsTypeActive, lastName, lastNameError, onResaleToWhomDataChanged, ticketBuyerFormStyles?.formContainer, ticketBuyerFormStyles?.inputs, ticketBuyerFormStyles?.radioButtons, ticketBuyerFormStyles?.rootContainer, ticketBuyerFormStyles?.title, toWhom, txt.friendForm, txt.sellToWhom, ] ) useEffect(() => { if (!isTicketsTypeActive) { onResaleToWhomDataChanged(ResaleToWhomFieldIdEnum.radioIndex, 0) } }, []) return ( {txt.title} {OrderDetails} {TicketBuyerForm} {Terms}