'use client' import { useCallback, useEffect, useState } from 'react' import Link from 'next/link' import { listAdminOrgs, type AdminOrgSummary } from '@/lib/api/admin' import { Button, LoadingOverlay, toast } from '@ciphera-net/ui' function formatDate(d: Date) { return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) } function CopyableOrgId({ id }: { id: string }) { const [copied, setCopied] = useState(false) const copy = useCallback(() => { navigator.clipboard.writeText(id) setCopied(true) toast.success('Org ID copied to clipboard') setTimeout(() => setCopied(false), 2000) }, [id]) return ( ) } export default function AdminOrgsPage() { const [orgs, setOrgs] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { listAdminOrgs() .then(setOrgs) .finally(() => setLoading(false)) }, []) if (loading) { return } return (

Organizations

All Organizations

{orgs.map((org) => ( ))}
Name Org ID Plan Status Limit Updated Actions
{org.business_name || 'N/A'} {org.plan_id} {org.subscription_status || '-'} {new Intl.NumberFormat().format(org.pageview_limit)} {formatDate(new Date(org.updated_at))}
) }