import { redirect } from "next/navigation"; import { desc } from "drizzle-orm"; import { getSession } from "@/lib/session"; import { db } from "@/db"; import { contactMessages, membershipRequests } from "@/db/schema"; import { can } from "@/lib/rbac"; import { setContactStatus, setRequestStatus } from "../actions"; import { ApproveRequestForm } from "./ApproveRequestForm"; export const dynamic = "force-dynamic"; const REQ_STATUS: Record = { new: { label: "Nouvelle", bg: "#fbeede", color: "#9a6638" }, approved: { label: "Approuvée", bg: "#e6f4ec", color: "#1f8a5b" }, rejected: { label: "Rejetée", bg: "#fbe9e6", color: "#d8472b" }, }; const MSG_STATUS: Record = { new: { label: "Nouveau", bg: "#fbeede", color: "#9a6638" }, read: { label: "Lu", bg: "#e7eef6", color: "#2C6FB3" }, archived: { label: "Archivé", bg: "#f1efe7", color: "#a99c82" }, }; function fmt(d: Date) { return new Date(d).toLocaleDateString("fr-FR", { day: "numeric", month: "long", year: "numeric" }); } function StatusPill({ map, status }: { map: typeof REQ_STATUS; status: string }) { const s = map[status] ?? map.new; return ( {s.label} ); } function ActionBtn({ children, color }: { children: React.ReactNode; color: string }) { return ( ); } export default async function DemandesPage() { const session = await getSession(); if (!can(session?.user.role, "manageMembers")) { redirect("/backend"); } const [requests, messages] = await Promise.all([ db.select().from(membershipRequests).orderBy(desc(membershipRequests.createdAt)), db.select().from(contactMessages).orderBy(desc(contactMessages.createdAt)), ]); return (
{/* ---- Demandes d'adhésion ---- */}
Demandes d'adhésion ({requests.length})
{requests.length === 0 && (
Aucune demande.
)} {requests.map((r) => (
{r.name}
{[r.email, fmt(r.createdAt)].filter(Boolean).join(" · ")}
Rejeter
{r.message && (

{r.message}

)}
))}
{/* ---- Messages de contact ---- */}
Messages de contact ({messages.length})
{messages.length === 0 && (
Aucun message.
)} {messages.map((m) => (
{m.name} {m.subject ? — {m.subject} : null}
{m.email} · {fmt(m.createdAt)}
Marquer lu
Archiver

{m.message}

))}
); }