import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { CreateAgentDialog } from "@/components/agents/CreateAgentDialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@/components/ui/pagination"; import { Plus, Search, Bot, ChevronRight } from "lucide-react"; export default function Agents() { const navigate = useNavigate(); const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false); const [searchQuery, setSearchQuery] = useState(""); const [currentPage, setCurrentPage] = useState(1); const itemsPerPage = 9; const [agents] = useState([ { id: 1, name: "Agente de Atendimento", status: "active" as const, version: "2.1", model: "Google Gemini 2.5 Flash", createdAt: "2 dias atrás", }, { id: 2, name: "Agente de Vendas", status: "active" as const, version: "1.5", model: "OpenAI GPT-5", createdAt: "5 dias atrás", }, { id: 3, name: "Agente de Análise", status: "inactive" as const, version: "1.0", model: "Anthropic Claude Sonnet 4.5", createdAt: "1 semana atrás", }, ]); const filteredAgents = agents.filter(agent => agent.name.toLowerCase().includes(searchQuery.toLowerCase()) ); // Paginação const totalPages = Math.ceil(filteredAgents.length / itemsPerPage); const startIndex = (currentPage - 1) * itemsPerPage; const endIndex = startIndex + itemsPerPage; const paginatedAgents = filteredAgents.slice(startIndex, endIndex); // Reset para primeira página quando buscar const handleSearch = (query: string) => { setSearchQuery(query); setCurrentPage(1); }; return (

Gestão de Agentes

Crie e gerencie agentes de IA com prompts e modelos específicos

handleSearch(e.target.value)} className="pl-10" />

{filteredAgents.length} {filteredAgents.length === 1 ? 'agente encontrado' : 'agentes encontrados'}

{totalPages > 1 && (

Página {currentPage} de {totalPages}

)}
{filteredAgents.length === 0 ? (

Nenhum agente encontrado.

) : ( <>
{paginatedAgents.map((agent) => ( navigate(`/agents/${agent.id}`)} > {/* Glow effect on hover */}
{agent.name}
v{agent.version}

Modelo de IA

{agent.model}

Status {agent.status === "active" ? "● Ativo" : "○ Inativo"}
))}
{totalPages > 1 && (
setCurrentPage(prev => Math.max(1, prev - 1))} className={currentPage === 1 ? "pointer-events-none opacity-50" : "cursor-pointer"} /> {[...Array(totalPages)].map((_, index) => { const pageNumber = index + 1; // Mostrar primeira página, última página e páginas próximas à atual if ( pageNumber === 1 || pageNumber === totalPages || (pageNumber >= currentPage - 1 && pageNumber <= currentPage + 1) ) { return ( setCurrentPage(pageNumber)} isActive={currentPage === pageNumber} className="cursor-pointer" > {pageNumber} ); } // Mostrar ellipsis if (pageNumber === currentPage - 2 || pageNumber === currentPage + 2) { return ( ); } return null; })} setCurrentPage(prev => Math.min(totalPages, prev + 1))} className={currentPage === totalPages ? "pointer-events-none opacity-50" : "cursor-pointer"} />
)} )}
); }