import React, { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import instance from "../security/http"; import config from "../config"; import { Card, CardHeader, CardBody, CardFooter, Image, Button, } from "@nextui-org/react"; interface Event { id: number; title: string; category: string; location: string; time: string; // Assuming time is a string, adjust if necessary description: string; imageUrl: string; } const EventsPage: React.FC = () => { const [events, setEvents] = useState([]); const [filteredEvents, setFilteredEvents] = useState([]); const [categories, setCategories] = useState([]); const [locations, setLocations] = useState([]); const [selectedCategory, setSelectedCategory] = useState(""); const [selectedLocation, setSelectedLocation] = useState(""); const [selectedTime, setSelectedTime] = useState(""); const navigate = useNavigate(); useEffect(() => { const fetchEvents = async () => { try { const res = await instance.get(`${config.serverAddress}/events`); console.log("Fetched events data:", res.data); setEvents(res.data); setFilteredEvents(res.data); // Extract unique categories and locations from events const uniqueCategories = Array.from( new Set(res.data.map((event) => event.category).filter(Boolean)) ); const uniqueLocations = Array.from( new Set(res.data.map((event) => event.location).filter(Boolean)) ); setCategories(uniqueCategories); setLocations(uniqueLocations); } catch (error) { console.error("Failed to fetch events:", error); } }; fetchEvents(); }, []); useEffect(() => { // Filter events based on selected criteria const filtered = events.filter((event) => { const matchCategory = selectedCategory ? event.category === selectedCategory : true; const matchLocation = selectedLocation ? event.location === selectedLocation : true; const matchTime = selectedTime ? event.time === selectedTime : true; return matchCategory && matchLocation && matchTime; }); setFilteredEvents(filtered); }, [selectedCategory, selectedLocation, selectedTime, events]); return (

Events

{/* Filter Options */}
{/* Event List */}
{filteredEvents.length === 0 ? (

No events available.

) : ( filteredEvents.map((event) => (

{event.title}

{event.title}

{event.description}

)) )}
); }; export default EventsPage;