'use client'; import { use, useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import { useOrgAdmin } from '@/app/_lib/org-admin-context'; export default function OrgTenantDetailPage({ params }: { params: Promise<{ id: string }> }) { const { id } = use(params); const { orgAdmin, loading } = useOrgAdmin(); const router = useRouter(); const [tenant, setTenant] = useState(null); const [showAdminForm, setShowAdminForm] = useState(false); const [adminForm, setAdminForm] = useState({ email: '', password: '', role: 'ADMIN' }); const [saving, setSaving] = useState(false); const [error, setError] = useState(''); useEffect(() => { if (loading) return; if (!orgAdmin) { router.replace('/org/login'); return; } fetch(`/api/org/tenants/${id}`) .then((r) => r.ok ? r.json() : null) .then((d) => setTenant(d)) .catch(() => {}); }, [orgAdmin, loading, router, id]); async function handleCreateAdmin(e: React.FormEvent) { e.preventDefault(); setError(''); setSaving(true); try { const res = await fetch(`/api/org/tenants/${id}/admins`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(adminForm), }); if (!res.ok) { const err = await res.json().catch(() => ({})); throw new Error(Array.isArray(err.message) ? err.message.join(', ') : (err.message ?? 'Failed')); } setShowAdminForm(false); setAdminForm({ email: '', password: '', role: 'ADMIN' }); const updated = await fetch(`/api/org/tenants/${id}`).then((r) => r.ok ? r.json() : null); if (updated) setTenant(updated); } catch (err) { setError(err instanceof Error ? err.message : 'Error'); } finally { setSaving(false); } } if (loading || !orgAdmin) return

Loading...

; if (!tenant) return

Chapter not found.

; return (

{tenant.name}

{tenant.slug}

{[ { label: 'Messages', value: tenant._count?.messages }, { label: 'Members', value: tenant._count?.towerUsers }, { label: 'Groups', value: tenant._count?.groups }, ].map((stat) => (

{stat.value ?? '—'}

{stat.label}

))}

Chapter Admins

{showAdminForm && (
void handleCreateAdmin(e)} className="p-5 border-b flex flex-col gap-3">
setAdminForm({ ...adminForm, email: e.target.value })} className="w-full border rounded-lg px-3 py-2 text-sm" required />
setAdminForm({ ...adminForm, password: e.target.value })} className="w-full border rounded-lg px-3 py-2 text-sm" required />
{error &&

{error}

}
)} {(tenant.admins ?? []).map((a: any) => ( ))}
Email Role Joined
{a.email} {a.role} {new Date(a.createdAt).toLocaleDateString()}
{tenant.admins?.length === 0 &&

No admins yet.

}
); }