'use client'; import { use, useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import { useSuperAdmin } from '@/app/_lib/super-admin-context'; export default function AdminOrgDetailPage({ params }: { params: Promise<{ id: string }> }) { const { id } = use(params); const { admin, loading } = useSuperAdmin(); const router = useRouter(); const [org, setOrg] = useState(null); const [showAdminForm, setShowAdminForm] = useState(false); const [adminForm, setAdminForm] = useState({ email: '', password: '', name: '', role: 'ORG_OWNER' }); const [tenantId, setTenantId] = useState(''); const [saving, setSaving] = useState(false); const [error, setError] = useState(''); async function load() { const res = await fetch(`/api/admin/orgs/${id}`); if (res.ok) setOrg(await res.json()); } useEffect(() => { if (loading) return; if (!admin) { router.replace('/admin/login'); return; } void load(); }, [admin, loading, router, id]); async function handleCreateAdmin(e: React.FormEvent) { e.preventDefault(); setError(''); setSaving(true); try { const res = await fetch(`/api/admin/orgs/${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(err.message ?? 'Failed'); } setShowAdminForm(false); setAdminForm({ email: '', password: '', name: '', role: 'ORG_OWNER' }); void load(); } catch (err) { setError(err instanceof Error ? err.message : 'Error'); } finally { setSaving(false); } } async function handleAssignTenant(e: React.FormEvent) { e.preventDefault(); setSaving(true); try { const res = await fetch(`/api/admin/tenants/${tenantId}/org`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ organizationId: id }), }); if (!res.ok) throw new Error('Failed to assign'); setTenantId(''); void load(); } catch (err) { setError(err instanceof Error ? err.message : 'Error'); } finally { setSaving(false); } } if (loading || !admin) return

Loading...

; if (!org) return

Organization not found.

; return (

{org.name}

{org.slug}

{/* Chapters */}

Chapters

void handleAssignTenant(e)} className="flex gap-2"> setTenantId(e.target.value)} className="border rounded-lg px-3 py-1.5 text-sm" placeholder="Tenant ID to assign" />
{(org.tenants ?? []).map((t: any) => ( ))}
Name Slug Status
{t.name} {t.slug} {t.isActive ? 'Active' : 'Inactive'}
{org.tenants?.length === 0 &&

No chapters assigned.

}
{/* Org Admins */}

Org 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 />
setAdminForm({ ...adminForm, name: e.target.value })} className="w-full border rounded-lg px-3 py-2 text-sm" />
{error &&

{error}

}
)} {(org.orgAdmins ?? []).map((a: any) => ( ))}
Email Name Role Created
{a.email} {a.name ?? '—'} {a.role} {new Date(a.createdAt).toLocaleDateString()}
{org.orgAdmins?.length === 0 &&

No org admins yet.

}
); }