import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import Layout from '../components/layout/Layout'; import { eventsAPI } from '../services/api'; import { Calendar, MapPin, Users, Loader2, CheckCircle, QrCode } from 'lucide-react'; const EventsPage = () => { const navigate = useNavigate(); const [events, setEvents] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); useEffect(() => { const fetchEvents = async () => { try { setLoading(true); const data = await eventsAPI.getAll(); setEvents(data); } catch (err) { setError('Failed to load events'); console.error('Error loading events:', err); } finally { setLoading(false); } }; fetchEvents(); }, []); const handleJoinEvent = (slug) => { navigate(`/events/${slug}/chat`); }; if (loading) { return ( Loading events... ); } if (error) { return ( {error} ); } return ( Choose an event Join an event and start connecting with other dancers {events.map((event) => ( {event.name} {event.isJoined && ( Joined )} {event.location} {new Date(event.startDate).toLocaleDateString('en-US')} - {new Date(event.endDate).toLocaleDateString('en-US')} {event.participantsCount} participants {event.description && ( {event.description} )} {event.isJoined ? ( handleJoinEvent(event.slug)} className="w-full px-4 py-2 bg-primary-600 text-white rounded-md hover:bg-primary-700 transition-colors" > Open chat ) : ( Check-in required Scan the QR code at the event venue to join the chat )} {/* Development mode: Show details link */} {import.meta.env.DEV && ( navigate(`/events/${event.slug}/details`)} className="w-full px-4 py-2 border border-gray-300 text-gray-700 rounded-md hover:bg-gray-50 transition-colors text-sm" > View details (dev) )} ))} ); }; export default EventsPage;
Loading events...
Join an event and start connecting with other dancers
{event.description}
Scan the QR code at the event venue to join the chat