diff --git a/frontend/src/components/EventDetails.tsx b/frontend/src/components/EventDetails.tsx index 39a550b..070bfdb 100644 --- a/frontend/src/components/EventDetails.tsx +++ b/frontend/src/components/EventDetails.tsx @@ -16,6 +16,17 @@ import { Chip } from '@mui/material'; +interface Event { + id: number; + title: string; + description: string; + date: string; + location: string; + slug: string; + needed_items?: string[] | string; + wallpaper?: string; +} + const EventDetails: React.FC = () => { const { slug } = useParams<{ slug: string }>(); const navigate = useNavigate(); @@ -66,7 +77,7 @@ const EventDetails: React.FC = () => { display: 'flex', justifyContent: 'center', alignItems: 'center', - backgroundImage: 'url(https://www.rydertech.us/backgrounds/space1.jpg)', + backgroundImage: event?.wallpaper ? `url(${event.wallpaper})` : 'url(https://www.rydertech.us/backgrounds/space1.jpg)', backgroundSize: 'cover', backgroundPosition: 'center', }} @@ -93,118 +104,128 @@ const EventDetails: React.FC = () => { } return ( - - - - {event.title} - - - {event.description} - - - - Date: {new Date(event.date).toLocaleDateString()} + + + + + {event.title} - - Location: {event.location} + + {event.description} - {event.needed_items && event.needed_items.length > 0 && ( - - - Needed Items: - - - {event.needed_items.map((item, index) => ( - - ))} + + + 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} + + + 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 - - - } - 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 - - } - /> - - )} - - - + } + /> + + )} + + + + ); }; diff --git a/frontend/src/components/EventView.tsx b/frontend/src/components/EventView.tsx index aaa555a..0a24116 100644 --- a/frontend/src/components/EventView.tsx +++ b/frontend/src/components/EventView.tsx @@ -90,9 +90,8 @@ const EventView: React.FC = () => { itemsBringing = rsvp.items_bringing; } - if (itemsBringing.length > 0) { - itemsBringing.forEach(item => claimed.add(item)); - } + // Add items to claimed set + itemsBringing.forEach(item => claimed.add(item)); } catch (e) { console.error('Error processing items for RSVP:', e); } @@ -103,12 +102,11 @@ const EventView: React.FC = () => { }; }); - // Filter out claimed items from needed items - const availableItems = items.filter(item => !claimed.has(item)); - - setNeededItems(availableItems); - setClaimedItems(Array.from(claimed)); + // Update state with processed data setRsvps(processedRsvps); + setClaimedItems(Array.from(claimed)); + // Filter needed items to only show unclaimed ones + setNeededItems(items.filter(item => !claimed.has(item))); setLoading(false); } catch (error) { setError('Failed to load event data');