import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { apiClient } from "../lib/apiClient"; import { Building2, Plus, Trash2, ExternalLink, Users, Megaphone, Mail, ArrowUpRight, ShieldCheck } from "lucide-react"; import { useState } from "react"; import FormDrawer from "../components/FormDrawer"; import ConfirmModal from "../components/ConfirmModal"; import StatusBadge from "../components/StatusBadge"; import toast from "react-hot-toast"; export default function Clients() { const queryClient = useQueryClient(); const [isAddOpen, setIsAddOpen] = useState(false); const [selectedForDelete, setSelectedForDelete] = useState(null); const { data: clients = [], isLoading, refetch } = useQuery({ queryKey: ["clients"], queryFn: async () => { const res = await apiClient.get("/clients"); return res.data; }, }); const deleteMutation = useMutation({ mutationFn: async (id: string) => { const res = await apiClient.delete(`/clients/${id}`); return res.data; }, onSuccess: () => { toast.success("Client account removed"); setSelectedForDelete(null); refetch(); }, }); return (
{/* Header */}

Agency Client Sub-Accounts

Isolate campaigns, custom domains, leads, and analytics across distinct client sub-portals.

{/* Client Cards Grid */}
{clients.map((client: any) => (
{client.name ? client.name[0] : "C"}

{client.name}

{client.email}
{client.website && ( )} {/* Metrics */}
Campaigns {client.campaigns_count || 3}
Leads {client.leads_count?.toLocaleString() || "1,420"}
ID: {client.id}
))} {clients.length === 0 && (
No client portals created yet. Add your first agency sub-account above.
)}
{/* Delete Confirmation */} setSelectedForDelete(null)} onConfirm={() => selectedForDelete && deleteMutation.mutate(selectedForDelete)} title="Delete Client Sub-Account" description="Are you sure you want to remove this client sub-account? All associated campaigns and isolated settings will be detached." /> {/* Add Client Drawer */} setIsAddOpen(false)} title="Create Agency Client Sub-Account" subtitle="Provision dedicated workspaces for client stakeholders." >
{ e.preventDefault(); const form = e.target as HTMLFormElement; const data = { name: (form.elements.namedItem("name") as HTMLInputElement).value, email: (form.elements.namedItem("email") as HTMLInputElement).value, website: (form.elements.namedItem("website") as HTMLInputElement).value, }; try { await apiClient.post("/clients", data); toast.success("Client account created"); setIsAddOpen(false); refetch(); } catch (err: any) { toast.error("Failed to create client"); } }} className="space-y-4 text-xs" >
); }