import React, { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import axios from 'axios'; import { Event, Rsvp } from '../types'; import { Button, Container, Typography, Box, Paper, List, ListItem, ListItemText, CircularProgress, Alert, Chip } from '@mui/material'; const EventDetails: React.FC = () => { const { slug } = useParams<{ slug: string }>(); const navigate = useNavigate(); const [event, setEvent] = useState(null); const [rsvps, setRsvps] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchEventDetails = async () => { try { const [eventResponse, rsvpsResponse] = await Promise.all([ axios.get(`/api/events/${slug}`), axios.get(`/api/events/${slug}/rsvps`) ]); setEvent(eventResponse.data); setRsvps(rsvpsResponse.data); setLoading(false); } catch (error) { setError('Failed to load event details'); setLoading(false); } }; fetchEventDetails(); }, [slug]); const formatAttendingStatus = (attending: string) => { return attending.charAt(0).toUpperCase() + attending.slice(1); }; const getStatusColor = (attending: string): "success" | "error" | "warning" => { switch (attending.toLowerCase()) { case 'yes': return 'success'; case 'no': return 'error'; default: return 'warning'; } }; if (loading) { return ( ); } if (error) { return ( {error} ); } if (!event) { return ( Event not found ); } return ( {event.title} {event.description} Date: {new Date(event.date).toLocaleDateString()} Location: {event.location} {event.needed_items && event.needed_items.length > 0 && ( Needed Items: {event.needed_items.map((item, index) => ( ))} )} RSVPs {rsvps.map((rsvp) => ( {rsvp.name} } secondary={ {rsvp.bringing_guests === 'yes' && ( Bringing {rsvp.guest_count} guest{rsvp.guest_count !== 1 ? 's' : ''}: {rsvp.guest_names} )} {rsvp.items_bringing && rsvp.items_bringing.length > 0 && ( Items: {Array.isArray(rsvp.items_bringing) ? rsvp.items_bringing.join(', ') : rsvp.items_bringing} )} } /> ))} {rsvps.length === 0 && ( No RSVPs yet } /> )} ); }; export default EventDetails;