'use client' import Link from 'next/link' import moment from "moment"; import { useState, useEffect } from "react" import axios from "axios"; export default function UpcomingEventData() { const [currentMonth, setCurrentMonth] = useState(moment()); const [events, setEvents] = useState([]); useEffect(() => { const fetchEvents = async () => { try { const API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3006/api'; const response = await axios.get(`${API_BASE_URL}/upcoming-events`); if (response.data && response.data.success) { const normalizedEvents = response.data.data.map(e => ({ ...e, title: e.title || e.eventtitle, date: e.date || e.eventdate, image: e.image || e.eventimageurl, desc: e.description || e.eventdescription, btnText: e.btn_text || e.btnText, link: e.link || (e.slug ? `/upcoming-event/${e.slug}` : `/upcoming-event/${e.id}`), location: e.location || e.venue, })); setEvents(normalizedEvents); } } catch (error) { console.error("Error fetching upcoming events:", error); } }; fetchEvents(); }, []); // Get start and end of current month const startOfMonth = currentMonth.clone().startOf("month"); const endOfMonth = currentMonth.clone().endOf("month"); // Generate calendar days const daysInMonth = []; for (let i = 0; i < startOfMonth.day(); i++) { daysInMonth.push(null); } for (let i = 1; i <= endOfMonth.date(); i++) { daysInMonth.push(moment(currentMonth).date(i)); } // Get events for a given date const getEventForDate = (date) => { if (!date) return []; const dateString = date.format("YYYY-MM-DD"); const dateStringDMY = date.format("DD/MM/YYYY"); return events.filter(event => { if (!event.date) return false; return event.date === dateString || event.date.includes(dateString) || event.date.includes(dateStringDMY); }); }; const formatEventDate = (dateStr) => { if (!dateStr) return ""; return dateStr.replace(/\d{4}-\d{2}-\d{2}/g, (date) => { const m = moment(date, "YYYY-MM-DD", true); return m.isValid() ? m.format("ddd, MMM DD, YYYY") : date; }); }; // Navigate months const handleMonthChange = (direction) => { setCurrentMonth(currentMonth.clone().add(direction, "months")); }; return (

Events

{/* Calendar (left side) */}
{currentMonth.format("MMMM YYYY")}
{["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].map((day, index) => ( ))} {Array.from({ length: Math.ceil(daysInMonth.length / 7) }, (_, rowIndex) => ( {daysInMonth .slice(rowIndex * 7, (rowIndex + 1) * 7) .map((day, index) => { const eventList = getEventForDate(day); return ( ); })} ))}
{day}
0 ? "#ce2029" : "white", color: eventList.length > 0 ? "white" : "black", }} title={ eventList.length > 0 ? eventList.map(e => e.title).join("\n") : "" } > {day ? (
{day.date()}
) : ( "" )}
{events.map((event, idx) => { const isEven = (idx + 1) % 2 === 0; const buttonHref = event.url || event.link || "#"; const isExternalButton = /^https?:\/\//.test(buttonHref); return (

{String(idx + 1).padStart(2, "0")}

{!isEven ? ( <>
{event.title}
  • {event.time{" "} {event.time ? `${event.time} - ` : ""} {formatEventDate(event.date)}
  • {event.location && event.location.trim() && (
  • {" "} {event.location}
  • )}
{event.title}

{event.desc}

{event.btnText || "Online Tickets"}
) : ( <>
  • {event.time{" "} {event.time ? `${event.time} - ` : ""} {formatEventDate(event.date)}
  • {event.location && event.location.trim() && (
  • {" "} {event.location}
  • )}
{event.title}

{event.desc}

{event.btnText || "Online Tickets"}
{event.title}
)}
); })}
) }