'use client'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import api from '@/lib/api'; interface Tenant { id: string; name: string; slug: string; isActive: boolean; createdAt: string; _count: { users: number; clients: number; subscriptions: number }; } export default function TenantsPage() { const [tenants, setTenants] = useState([]); const [loading, setLoading] = useState(true); const [search, setSearch] = useState(''); const [status, setStatus] = useState('all'); const [page, setPage] = useState(1); const [total, setTotal] = useState(0); const limit = 20; useEffect(() => { loadTenants(); }, [search, status, page]); async function loadTenants() { setLoading(true); try { const params = new URLSearchParams({ page: String(page), limit: String(limit) }); if (search) params.set('search', search); if (status !== 'all') params.set('status', status); const res = await api.get(`/tenants?${params}`); setTenants(res.data.data.items); setTotal(res.data.data.total); } catch (err) { console.error('Failed to load tenants:', err); } finally { setLoading(false); } } const totalPages = Math.ceil(total / limit); return (

Tenants

{total} total tenants

New Tenant
{ setSearch(e.target.value); setPage(1); }} className="px-3 py-2 border border-surface-300 rounded-lg text-sm flex-1 max-w-xs" />
{loading ? ( ) : tenants.length === 0 ? ( ) : ( tenants.map((t) => ( )) )}
Name Slug Status Users Clients Subscriptions Created
Loading...
No tenants found
{t.name} {t.slug} {t.isActive ? 'Active' : 'Inactive'} {t._count.users} {t._count.clients} {t._count.subscriptions} {new Date(t.createdAt).toLocaleDateString()}
{totalPages > 1 && (
Page {page} of {totalPages}
)}
); }