import { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { useQuery } from "@tanstack/react-query"; 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, Loader2 } from "lucide-react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { listAgents } from "@/lib/api/agents"; export default function Agents() { const navigate = useNavigate(); const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false); const [searchQuery, setSearchQuery] = useState(""); const [debouncedSearch, setDebouncedSearch] = useState(""); const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage, setItemsPerPage] = useState(6); // Debounce search query useEffect(() => { const handler = setTimeout(() => { setDebouncedSearch(searchQuery); setCurrentPage(1); // Reset to first page on search }, 500); return () => { clearTimeout(handler); }; }, [searchQuery]); // Fetch agents from API const { data: agentsData, isLoading, isError, refetch, } = useQuery({ queryKey: ["agents", debouncedSearch, currentPage, itemsPerPage], queryFn: () => listAgents( debouncedSearch || undefined, currentPage, itemsPerPage ), }); const agents = agentsData?.data || []; const totalPages = agentsData?.total_pages || 0; const totalAgents = agentsData?.total || 0; return (

Gestão de Agentes

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

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

{totalAgents} {totalAgents === 1 ? 'agente encontrado' : 'agentes encontrados'}

Itens por página:
{totalPages > 1 && (

Página {currentPage} de {totalPages}

)}
{isLoading ? (
) : isError ? (

Erro ao carregar agentes.

) : agents.length === 0 ? (

Nenhum agente encontrado.

) : ( <>
{agents.map((agent) => ( navigate(`/prompt-labs/agents/${agent.agente_id}`)} > {/* Glow effect on hover */}
{agent.nome_agente}
v{agent.versao_agente}

Modelo de IA

{agent.modelo_ia}

Status {agent.status === "ativo" ? "● 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"} />
)} )}
); }