import './style.css' import Button from '@mui/material/Button' import CircularProgress from '@mui/material/CircularProgress' import { Field, Form, Formik } from 'formik' import _find from 'lodash/find' import React, { useState } from 'react' import { addToWaitingList } from '../../api' import { isBrowser } from '../../utils' import { ErrorFocus } from '../../utils/formikErrorFocus' import { combineValidators, emailValidator, requiredValidator, } from '../../validators' import { CustomField } from '../common/index' interface WaitingListProps { tickets: any; eventId: number; defaultMaxQuantity: number; } interface WaitingListFields { ticketTypeId: string; quantity: string; firstName: string; lastName: string; email: string; } const generateQuantity = (n: number) => { const quantityList = [] for (let i = 1; i <= n; i++) { quantityList.push({ label: i, value: i }) } return quantityList } const WaitingList = ({ tickets = {}, eventId, defaultMaxQuantity = 10, }: WaitingListProps) => { const userData = isBrowser && window.localStorage.getItem('user_data') ? JSON.parse(window.localStorage.getItem('user_data') || '') : {} const [showSuccessMessage, setShowSuccessMessage] = useState(false) const [loading, setLoading] = useState(false) const ticketTypesList = Object.values(tickets).map((d: any) => ({ label: d.displayName, value: d.id, })) const showTicketsField = Boolean(ticketTypesList.length) const handleSubmit = async (values: WaitingListFields) => { try { setLoading(true) const response = await addToWaitingList(eventId, { attributes: values }) if (response.success) { setShowSuccessMessage(true) } } catch (error) { } finally { setLoading(false) } } return (
{showSuccessMessage ? (

You've been added to the waiting list!

You'll be notified if tickets become available.

) : ( <>

WAITING LIST

{({ values, setFieldValue }) => { const selectedTicket = _find(tickets, n => n.id === values.ticketTypeId) return (
{showTicketsField && ( <>
) => { setFieldValue('ticketTypeId', e.target.value) setFieldValue('quantity', '') }} selectOptions={[ { label: 'Type of Ticket', value: '', disabled: true }, ...ticketTypesList, ]} />
)}
requiredValidator(value, 'Please enter your First name') } component={CustomField} />
requiredValidator(value, 'Please enter your Last name') } component={CustomField} />
requiredValidator(value, 'Please enter your Email'), (value: string) => emailValidator(value) )} component={CustomField} />
) }}
)}
) } export default WaitingList