import React, { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import axios from 'axios'; import { Box, Paper, Typography, TextField, Button, FormControl, InputLabel, Select, MenuItem, SelectChangeEvent, Container, Checkbox, ListItemText, OutlinedInput, } from '@mui/material'; interface RSVPFormData { name: string; attending: string; bringing_guests: string; guest_count: number; guest_names: string; items_bringing: string[]; } const RSVPForm: React.FC = () => { const { slug } = useParams<{ slug: string }>(); const [formData, setFormData] = useState({ name: '', attending: '', bringing_guests: '', guest_count: 0, guest_names: '', items_bringing: [] }); const [neededItems, setNeededItems] = useState([]); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); const navigate = useNavigate(); useEffect(() => { const fetchEventDetails = async () => { try { const response = await axios.get(`/api/events/${slug}`); setNeededItems(response.data.needed_items || []); } catch (error) { setError('Failed to load event details'); setNeededItems([]); } }; fetchEventDetails(); }, [slug]); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleSelectChange = (e: SelectChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleItemsChange = (e: SelectChangeEvent) => { const value = e.target.value; const itemsArray = Array.isArray(value) ? value : typeof value === 'string' ? [value] : []; setFormData(prev => ({ ...prev, items_bringing: itemsArray })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsSubmitting(true); setError(null); try { await axios.post(`/api/events/${slug}/rsvp`, formData); setSuccess(true); } catch (err) { setError('Failed to submit RSVP. Please try again.'); } finally { setIsSubmitting(false); } }; if (success) { return ( Thank You! Your RSVP has been submitted successfully. ); } return ( RSVP Form {error && ( {error} )} Are you attending? {formData.attending === 'yes' && ( <> Are you bringing any guests? {formData.bringing_guests === 'yes' && ( <> )} {neededItems.length > 0 && ( What items are you bringing? )} )} ); }; export default RSVPForm;