"use client"; import { useState } from "react"; import { format } from "date-fns"; import { setUserRole, deleteUser } from "@/actions/admin"; import { useSession } from "next-auth/react"; import { ConfirmModal } from "@/components/ConfirmModal"; interface Template { id: string; name: string; dimensions: { id: string; title: string; orderIndex: number }[]; } interface User { id: string; email: string; name: string | null; role: string; createdAt: Date | string; } interface AdminClientProps { templates: Template[]; users: User[]; } export function AdminClient({ templates, users: initialUsers }: AdminClientProps) { const { data: session } = useSession(); const [users, setUsers] = useState(initialUsers); const [updatingId, setUpdatingId] = useState(null); const [deleteTarget, setDeleteTarget] = useState(null); async function handleSetRole(userId: string, role: "admin" | "evaluator") { setUpdatingId(userId); try { const result = await setUserRole(userId, role); if (result.success) { setUsers((prev) => prev.map((u) => (u.id === userId ? { ...u, role } : u))); } else { alert(result.error); } } finally { setUpdatingId(null); } } return (

Admin

Users

{users.map((u) => ( ))}
Email Nom Rôle Créé le
{u.email} {u.name ?? "—"} {u.role} {format(new Date(u.createdAt), "yyyy-MM-dd HH:mm")} {u.role === "admin" ? ( ) : ( )} {u.id !== session?.user?.id && ( )}
{ if (!deleteTarget) return; const result = await deleteUser(deleteTarget.id); if (result.success) { setUsers((prev) => prev.filter((u) => u.id !== deleteTarget.id)); setDeleteTarget(null); } else { alert(result.error); } }} onCancel={() => setDeleteTarget(null)} />

Modèles

{templates.map((t) => (

{t.name}

{t.dimensions.length} dim.

    {t.dimensions.slice(0, 5).map((d) => (
  • • {d.title}
  • ))} {t.dimensions.length > 5 && (
  • +{t.dimensions.length - 5}
  • )}
))}
); }