import "../../assets/css/index.css"; import { useState, useEffect } from "react"; import { Link } from "react-router-dom"; import supabase from "../../Supabase.js"; import Swal from "sweetalert2"; import { getAccessToken } from "../../utils/auth.js"; import { getUserRole } from "../../utils/userInfo.js"; const AvatarForm = "/img/AvatarForm.jpg"; function DoctorList() { const [search, setSearch] = useState(""); const [specialtyFilter, setSpecialtyFilter] = useState(""); // Filtro por especialidade const [doctors, setDoctors] = useState([]); const [openDropdown, setOpenDropdown] = useState(null); const tokenUsuario = getAccessToken() const role = getUserRole(); var myHeaders = new Headers(); const supabaseUrl = import.meta.env.VITE_SUPABASE_URL; const supabaseAK = import.meta.env.VITE_SUPABASE_ANON_KEY; myHeaders.append( "apikey", supabaseAK ); myHeaders.append("Authorization", `Bearer ${tokenUsuario}`); var requestOptions = { method: "GET", headers: myHeaders, redirect: "follow", }; // buscar médicos useEffect(() => { fetch(`${supabaseUrl}/rest/v1/doctors`, requestOptions) .then((response) => response.json()) .then((result) => setDoctors(Array.isArray(result) ? result : [])) .catch((error) => console.log("error", error)); }, []); const handleDelete = async (id) => { Swal.fire({ title: "Tem certeza?", text: "Tem certeza que deseja excluir este registro?", icon: "warning", showCancelButton: true, confirmButtonColor: "#3085d6", cancelButtonColor: "#d33", confirmButtonText: "Sim, excluir", cancelButtonText: "Cancelar" }).then(async (result) => { if (result.isConfirmed) { try { const tokenUsuario = getAccessToken(); // pega o token do usuário (mesmo que usa no form) var myHeaders = new Headers(); myHeaders.append("apikey", supabaseAK); myHeaders.append("Authorization", `Bearer ${tokenUsuario}`); myHeaders.append("Content-Type", "application/json"); const response = await fetch( `${supabaseUrl}/rest/v1/doctors?id=eq.${id}`, { method: "DELETE", headers: myHeaders, } ); if (!response.ok) { const err = await response.json(); console.error("Erro ao deletar médico:", err); Swal.fire("Erro!", err.message || "Não foi possível excluir o registro.", "error"); return; } // Atualiza a lista local setDoctors((prev) => prev.filter((doc) => doc.id !== id)); Swal.fire("Excluído!", "O registro foi removido com sucesso.", "success"); } catch (error) { console.error("Erro inesperado:", error); Swal.fire("Erro!", "Algo deu errado ao excluir.", "error"); } } }); }; const handleViewDetails = async (id) => { try { const tokenUsuario = getAccessToken(); const response = await fetch( `${supabaseUrl}/rest/v1/doctors?id=eq.${id}`, { method: "GET", headers: { apikey: supabaseAK, Authorization: `Bearer ${tokenUsuario}`, }, } ); const data = await response.json(); const doctor = data[0]; if (!doctor) { Swal.fire("Erro", "Não foi possível carregar os detalhes do médico.", "error"); return; } Swal.fire({ width: "800px", showConfirmButton: true, confirmButtonText: "Fechar", confirmButtonColor: "#4dabf7", background: document.body.classList.contains("dark-mode") ? "#1e1e2f" : "#fff", color: document.body.classList.contains("dark-mode") ? "#f5f5f5" : "#000", html: `
${doctor.specialty || "Especialidade não informada"}
Telefone: ${doctor.phone_mobile || "—"}
Email: ${doctor.email || "—"}
Data de nascimento: ${doctor.birth_date || "—"}
Sexo: ${doctor.gender || "—"}
Região: ${doctor.city || "—"}, ${doctor.state || "—"}, Brasil
CRM: ${doctor.crm || "—"}
Especialidade: ${doctor.specialty || "—"}
Experiência: ${doctor.experience_years || "—"} anos
${doctor.biografia || "Este médico ainda não possui biografia cadastrada."}
{search || specialtyFilter ? "Tente ajustar os filtros de busca" : "Nenhum médico cadastrado no sistema"}