"use client";
import { useEffect, useState } from "react";
import { api } from "@/lib/api";
import { getMeetupStartUtc } from "@/lib/meetupEventTime";
import { Navbar } from "@/components/public/Navbar";
import { Footer } from "@/components/public/Footer";
import { MeetupCard } from "@/components/public/MeetupCard";
import { AddToCalendarButton } from "@/components/public/AddToCalendarDialog";
function CardSkeleton() {
return (
);
}
export default function EventsPage() {
const [meetups, setMeetups] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
api
.getMeetups()
.then((data: any) => {
const list = Array.isArray(data) ? data : [];
setMeetups(list);
})
.catch((err) => setError(err.message))
.finally(() => setLoading(false));
}, []);
const now = new Date();
const upcoming = meetups.filter((m) => {
const start = getMeetupStartUtc(m.date, m.time || "00:00");
if (Number.isNaN(start.getTime())) return false;
return start >= now;
});
const past = meetups
.filter((m) => {
const start = getMeetupStartUtc(m.date, m.time || "00:00");
if (Number.isNaN(start.getTime())) return false;
return start < now;
})
.reverse();
return (
<>
{error && (
Failed to load events: {error}
)}
Upcoming
{!loading && upcoming.length > 0 && (
{upcoming.length}
)}
{loading ? (
{[0, 1, 2].map((i) => )}
) : upcoming.length === 0 ? (
No upcoming events scheduled. Check back soon.
) : (
{upcoming.map((m) => )}
)}
{(loading || past.length > 0) && (
Past Events
{loading ? (
{[0, 1, 2].map((i) => )}
) : (
{past.map((m) => )}
)}
)}
>
);
}