"use client"; import { useEffect, useState } from "react"; import Link from "next/link"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Eye, Edit, Calendar, Trash2 } from "lucide-react"; import { pacientesApi, Patient } from "@/services/pacientesApi"; import { PatientDetailsModal } from "@/components/ui/patient-details-modal"; import { toast } from "@/hooks/use-toast"; export default function PacientesPage() { const [pacientes, setPacientes] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const [selectedPatient, setSelectedPatient] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage] = useState(10); const handleOpenModal = (patient: Patient) => { setSelectedPatient(patient); setIsModalOpen(true); }; const handleCloseModal = () => { setSelectedPatient(null); setIsModalOpen(false); }; const formatDate = (dateString?: string) => { if (!dateString) return "N/A"; try { const date = new Date(dateString); return new Intl.DateTimeFormat('pt-BR').format(date); } catch { return "Data inválida"; } }; const handleDelete = async (patientId: string) => { if (!confirm("Tem certeza que deseja excluir este paciente?")) return; try { await pacientesApi.delete(patientId); setPacientes(prevPacientes => prevPacientes.filter(p => p.id !== patientId)); toast({ title: "Sucesso", description: "Paciente excluído com sucesso.", }); } catch (err: any) { toast({ title: "Erro", description: err.message || "Não foi possível excluir o paciente.", variant: "destructive", }); } }; useEffect(() => { const fetchPacientes = async () => { setIsLoading(true); setError(null); try { const data = await pacientesApi.list(); setPacientes(data || []); } catch (e: any) { setError(e?.message || "Erro ao carregar pacientes"); console.error(e); } finally { setIsLoading(false); } }; fetchPacientes(); }, []); const indexOfLastItem = currentPage * itemsPerPage; const indexOfFirstItem = indexOfLastItem - itemsPerPage; const currentItems = pacientes.slice(indexOfFirstItem, indexOfLastItem); const totalPages = Math.ceil(pacientes.length / itemsPerPage); const paginate = (pageNumber: number) => setCurrentPage(pageNumber); return (

Pacientes

Lista de pacientes vinculados

{isLoading ? ( ) : error ? ( ) : currentItems.length === 0 ? ( ) : ( currentItems.map((p) => ( )) )}
Nome Telefone Cidade Estado Último atendimento Próximo atendimento Ações
Carregando pacientes...
{`Erro: ${error}`}
Nenhum paciente encontrado
{p.full_name} {p.phone_mobile} {p.city} {p.state} {formatDate(p.created_at)} N/A handleOpenModal(p)}> Ver detalhes Laudos alert(`Agenda para paciente ID: ${p.id}`)}> Ver agenda handleDelete(p.id)} className="text-red-600"> Excluir
{pacientes.length > itemsPerPage && (
{Array.from({ length: totalPages }, (_, i) => ( ))}
)}
); }