import React, { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import instance from "../security/http"; import config from "../config"; import axios from "axios"; import { Card, CardHeader, CardBody, CardFooter, Image, Button, } from "@nextui-org/react"; interface Event { id: number; title: string; category: string; location: string; time: string; description: string; evtPicture: string; // Changed to evtPicture } const EventsPage: React.FC = () => { const [events, setEvents] = useState([]); const [filteredEvents, setFilteredEvents] = useState([]); const [categories, setCategories] = useState([]); const [townCouncils, setTownCouncils] = useState([]); const [selectedCategory, setSelectedCategory] = useState(""); const [selectedTownCouncil, setSelectedTownCouncil] = 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)) ); setCategories(uniqueCategories); } catch (error) { console.error("Failed to fetch events:", error); } }; const fetchTownCouncils = async () => { try { const res = await axios.get( `${config.serverAddress}/users/town-councils-metadata` ); setTownCouncils(JSON.parse(res.data).townCouncils); } catch (error) { console.error("Failed to fetch town councils:", error); } }; fetchEvents(); fetchTownCouncils(); }, []); useEffect(() => { // Filter events based on selected criteria const filtered = events.filter((event) => { const matchCategory = selectedCategory ? event.category === selectedCategory : true; const matchTownCouncil = selectedTownCouncil ? event.location === selectedTownCouncil : true; const matchTime = selectedTime ? event.time === selectedTime : true; return matchCategory && matchTownCouncil && matchTime; }); setFilteredEvents(filtered); }, [selectedCategory, selectedTownCouncil, selectedTime, events]); return (

Events

{/* Filter Options */}
{townCouncils.length > 0 && ( )}
{/* Event List */}
{filteredEvents.length === 0 ? (

No events available.

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

{event.title}

{event.evtPicture && (
{event.title}
)}

{event.description}

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