import React, { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { Box, Button, Card, CardContent, Typography, Grid, CardActions, Container, Chip, Stack, } from '@mui/material'; import AdminPanelSettingsIcon from '@mui/icons-material/AdminPanelSettings'; import VisibilityIcon from '@mui/icons-material/Visibility'; import HowToRegIcon from '@mui/icons-material/HowToReg'; import axios from 'axios'; interface Event { id: number; title: string; description: string; date: string; location: string; slug: string; rsvp_cutoff_date?: string; } const EventList: React.FC = () => { const [events, setEvents] = useState([]); const navigate = useNavigate(); useEffect(() => { fetchEvents(); }, []); const fetchEvents = async () => { try { const response = await axios.get('/api/events'); setEvents(response.data); } catch (error) { console.error('Error fetching events:', error); } }; const isEventOpen = (event: Event) => { if (!event.rsvp_cutoff_date) return true; const cutoffDate = new Date(event.rsvp_cutoff_date); return new Date() < cutoffDate; }; const handleAdminClick = (event: Event, e: React.MouseEvent) => { e.stopPropagation(); window.location.href = `/admin/events/${event.slug}`; }; const handleViewClick = (event: Event, e: React.MouseEvent) => { e.stopPropagation(); navigate(`/view/events/${event.slug}`); }; return ( RSVP Manager Welcome to RSVP Manager! Create and manage your events with ease. Organize gatherings, track attendance, and coordinate items that guests can bring. Perfect for parties, meetings, and any event that needs RSVP coordination. {events.map((event) => ( {event.title} {event.description && ( Info: {event.description} )} Date: {new Date(event.date).toLocaleString()} Location: {event.location} {event.rsvp_cutoff_date && ( RSVP cut-off date: {new Date(event.rsvp_cutoff_date).toLocaleString()} )} {isEventOpen(event) && ( )} ))} ); }; export default EventList;