'use client'; import axios from 'axios'; import Cookies from 'universal-cookie'; import { Metadata } from 'next'; import Link from 'next/link'; import React, { useEffect, useState } from 'react'; import IconTrashLines from '../icon/icon-trash-lines'; import IconPencil from '../icon/icon-pencil'; import IconEye from '../icon/icon-eye'; import Swal from 'sweetalert2'; import { useRouter } from 'next/navigation'; import { buildApiUrl } from '@/utils/BaseUrl.utils'; export const metadata: Metadata = { title: 'Upcoming Events', }; const ListOfUpcomingEvents = () => { const router = useRouter(); const [events, setEvents] = useState([]); const [selectedEvent, setSelectedEvent] = useState(null); useEffect(() => { getEvents(); }, []); const getEvents = async () => { try { const cookies = new Cookies(); const token = cookies.get('token'); const eventRes: any = await axios.get(buildApiUrl('upcoming-events'), { headers: { Authorization: `Bearer ${token}` }, }); console.log('Upcoming Events Res:', eventRes); if (eventRes?.data?.success) { setEvents(eventRes?.data?.data || []); } } catch (error) { console.error('Error fetching upcoming events:', error); } }; const handleEdit = (event: any) => { router.push(`/edit-upcoming-event?id=${event.id}`); }; const handleView = (event: any) => { setSelectedEvent(event); }; const showAlert = async (event: any) => { Swal.fire({ icon: 'warning', title: 'Are you sure?', text: `You are about to delete "${event.title || event.eventtitle}". You won't be able to revert this!`, showCancelButton: true, confirmButtonText: 'Delete', padding: '2em', customClass: { popup: 'sweet-alerts' }, }).then(async (result) => { if (result.isConfirmed) { try { const cookies = new Cookies(); const token = cookies.get('token'); await axios.delete(buildApiUrl(`upcoming-events/${event.id}`), { headers: { Authorization: `Bearer ${token}` }, }); Swal.fire({ title: 'Deleted!', text: 'Upcoming event has been deleted.', icon: 'success', customClass: { popup: 'sweet-alerts' }, }); getEvents(); } catch (error) { Swal.fire({ title: 'Error!', text: 'Failed to delete the upcoming event.', icon: 'error', customClass: { popup: 'sweet-alerts' }, }); } } }); }; return (

Upcoming Events

+ Add New Event
{/* First box: Create New Upcoming Event */}
+
Create New Upcoming Event
{/* List dynamic event cards */} {events.map((event: any, index: number) => { const title = event.title || event.eventtitle || 'Untitled Event'; const date = event.date || event.eventdate || 'Date TBD'; const time = event.time || ''; const location = event.location || ''; const image = event.image || event.eventimageurl || '/assets/images/placeholder.jpg'; const description = event.description || event.desc || event.eventdescription || ''; const btnText = event.btn_text || event.btnText || 'Details Coming Soon'; return (
{/* Top-right action buttons */}
{/* Image */}
{title} { e.target.src = 'https://via.placeholder.com/400x200?text=Upcoming+Event'; }} />
{/* Event content */}

{title}

📅 {date} {time ? `| 🕒 ${time}` : ''}

{location && (

📍 {location}

)}

{description}

{/* Footer badge */}
{btnText}
); })}
{/* View Modal */} {selectedEvent && (

{selectedEvent.title || selectedEvent.eventtitle}

{(selectedEvent.image || selectedEvent.eventimageurl) && ( {selectedEvent.title} )}

Date: {selectedEvent.date || selectedEvent.eventdate || 'N/A'}

{selectedEvent.time &&

Time: {selectedEvent.time}

} {selectedEvent.location &&

Location: {selectedEvent.location}

} {selectedEvent.admission &&

Admission: {selectedEvent.admission}

} {selectedEvent.link &&

Link: {selectedEvent.link}

}

Button Text: {selectedEvent.btn_text || selectedEvent.btnText || 'Details Coming Soon'}

Description:

{selectedEvent.description || selectedEvent.desc || selectedEvent.eventdescription || 'No description provided.'}

)}
); }; export default ListOfUpcomingEvents;