Files
got-gaming/app/events/page.tsx

62 lines
1.7 KiB
TypeScript

import NavigationWrapper from "@/components/NavigationWrapper";
import EventsPageSection from "@/components/EventsPageSection";
import { prisma } from "@/lib/prisma";
import { getBackgroundImage } from "@/lib/preferences";
import { auth } from "@/lib/auth";
export default async function EventsPage() {
const events = await prisma.event.findMany({
orderBy: {
date: "desc",
},
});
// Sérialiser les dates pour le client
const serializedEvents = events.map((event) => ({
...event,
date: event.date.toISOString(),
createdAt: event.createdAt.toISOString(),
updatedAt: event.updatedAt.toISOString(),
}));
const backgroundImage = await getBackgroundImage("events", "/got-2.jpg");
// Récupérer les inscriptions côté serveur pour éviter le clignotement
const session = await auth();
const initialRegistrations: Record<string, boolean> = {};
if (session?.user?.id) {
const upcomingEvents = events.filter((e) => e.status === "UPCOMING");
const eventIds = upcomingEvents.map((e) => e.id);
if (eventIds.length > 0) {
const registrations = await prisma.eventRegistration.findMany({
where: {
userId: session.user.id,
eventId: {
in: eventIds,
},
},
select: {
eventId: true,
},
});
registrations.forEach((reg) => {
initialRegistrations[reg.eventId] = true;
});
}
}
return (
<main className="min-h-screen bg-black relative">
<NavigationWrapper />
<EventsPageSection
events={serializedEvents}
backgroundImage={backgroundImage}
initialRegistrations={initialRegistrations}
/>
</main>
);
}