import { useState } from 'react'; import { useNavigate } from 'react-router'; import { AlertDialog, Badge, Card, DataTable, EmptyState, Spinner, } from '@cameleer/design-system'; import type { Column } from '@cameleer/design-system'; import { useAllTenants } from '../api/hooks'; import { useOrgStore } from '../auth/useOrganization'; import type { TenantResponse } from '../types/api'; import styles from '../styles/platform.module.css'; const columns: Column[] = [ { key: 'name', header: 'Name' }, { key: 'slug', header: 'Slug' }, { key: 'tier', header: 'Tier', render: (_v: unknown, row: TenantResponse) => , }, { key: 'status', header: 'Status', render: (_v: unknown, row: TenantResponse) => ( ), }, { key: 'createdAt', header: 'Created', render: (_: unknown, row: TenantResponse) => new Date(row.createdAt).toLocaleDateString() }, ]; export function AdminTenantsPage() { const navigate = useNavigate(); const { data: tenants, isLoading, isError } = useAllTenants(); const { setCurrentOrg } = useOrgStore(); const [switchTarget, setSwitchTarget] = useState(null); if (isLoading) { return (
); } if (isError) { return (
); } const handleRowClick = (tenant: TenantResponse) => { setSwitchTarget(tenant); }; const confirmSwitch = () => { if (!switchTarget) return; const orgs = useOrgStore.getState().organizations; const match = orgs.find((o) => o.name === switchTarget.name || o.slug === switchTarget.slug); if (match) { setCurrentOrg(match.id); navigate('/'); } setSwitchTarget(null); }; return (

All Tenants

{(!tenants || tenants.length === 0) ? ( ) : ( )} setSwitchTarget(null)} onConfirm={confirmSwitch} title="Switch tenant?" description={`Switch to tenant "${switchTarget?.name}"? Your dashboard context will change.`} confirmLabel="Switch" variant="warning" />
); }