// components/InviteForm.tsx "use client"; import { useState } from "react"; type Org = { id: string; name: string }; export default function InviteForm({ orgs, defaultOrgId, hideOrgSelect }: { orgs: Org[]; defaultOrgId?: string; hideOrgSelect?: boolean }) { const [firstName, setFirstName] = useState(""); const [email, setEmail] = useState(""); const [orgId, setOrgId] = useState(defaultOrgId || orgs[0]?.id || ""); const [role, setRole] = useState("ADMIN"); const [submitting, setSubmitting] = useState(false); const [done, setDone] = useState(null); const [error, setError] = useState(null); async function onSubmit(e: React.FormEvent) { e.preventDefault(); setError(null); setDone(null); setSubmitting(true); try { const res = await fetch("/api/access/nouveau", { method: "POST", headers: { "Content-Type": "application/json" }, credentials: "include", body: JSON.stringify({ firstName, email, orgId, role }), }); const json = await res.json().catch(() => ({})); if (!res.ok) { setError(json?.error || "Erreur lors de la création de l’utilisateur"); } else { const resolvedOrgId = orgId || defaultOrgId || orgs[0]?.id || ""; const orgName = orgs.find((o) => o.id === resolvedOrgId)?.name || ""; setDone({ email, orgName, role }); setFirstName(""); setEmail(""); } } catch (err: any) { setError(err?.message || "Erreur réseau"); } finally { setSubmitting(false); } } return (
setFirstName(e.target.value)} placeholder="Prénom" />
setEmail(e.target.value)} placeholder="ex: nom@domaine.fr" required />
{!hideOrgSelect && (
)}

Un email d'activation sera envoyé automatiquement avec un lien sécurisé pour activer le compte.

{error &&

{error}

} {done && (
✅ Invitation envoyée à {done.email} pour {done.orgName} ({done.role})
)}
Annuler
); }