import React, { useState, useEffect } from "react"; import API_KEY from "../components/utils/apiKeys"; import { useAuth } from "../components/utils/AuthProvider"; import { Link } from "react-router-dom"; import "./style/TableDoctor.css"; function TableDoctor() { const { getAuthorizationHeader, isAuthenticated } = useAuth(); const [medicos, setMedicos] = useState([]); const [search, setSearch] = useState(""); const [filtroEspecialidade, setFiltroEspecialidade] = useState("Todos"); // REMOVIDO: const [filtroVIP, setFiltroVIP] = useState(false); const [filtroAniversariante, setFiltroAniversariante] = useState(false); // Estados para filtros avançados const [showFiltrosAvancados, setShowFiltrosAvancados] = useState(false); const [filtroCidade, setFiltroCidade] = useState(""); const [filtroEstado, setFiltroEstado] = useState(""); const [idadeMinima, setIdadeMinima] = useState(""); const [idadeMaxima, setIdadeMaxima] = useState(""); const [dataInicial, setDataInicial] = useState(""); const [dataFinal, setDataFinal] = useState(""); // estados do modal const [showDeleteModal, setShowDeleteModal] = useState(false); const [selectedDoctorId, setSelectedDoctorId] = useState(null); // Função para excluir médicos const deleteDoctor = async (id) => { const authHeader = getAuthorizationHeader() console.log(id, 'teu id') var myHeaders = new Headers(); myHeaders.append('apikey', API_KEY); myHeaders.append("Authorization", authHeader) var requestOptions = { method: "DELETE", redirect: "follow", headers: myHeaders }; try { const result = await fetch( `https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctors?id=eq.${id}`, requestOptions ); setMedicos((prev) => prev.filter((p) => p.id !== id)); console.log(result) } catch (error) { console.log("Deu problema", error); } finally { setShowDeleteModal(false); } }; // Função para verificar se hoje é aniversário const ehAniversariante = (dataNascimento) => { if (!dataNascimento) return false; const hoje = new Date(); const nascimento = new Date(dataNascimento); return ( hoje.getDate() === nascimento.getDate() && hoje.getMonth() === nascimento.getMonth() ); }; // Função para calcular idade a partir da data de nascimento const calcularIdade = (dataNascimento) => { if (!dataNascimento) return 0; const hoje = new Date(); const nascimento = new Date(dataNascimento); let idade = hoje.getFullYear() - nascimento.getFullYear(); const mes = hoje.getMonth() - nascimento.getMonth(); if (mes < 0 || (mes === 0 && hoje.getDate() < nascimento.getDate())) { idade--; } return idade; }; <<<<<<< HEAD // Função para limpar todos os filtros const limparFiltros = () => { setSearch(""); setFiltroEspecialidade("Todos"); // REMOVIDO: setFiltroVIP(false); setFiltroAniversariante(false); setShowFiltrosAvancados(false); // Adicionado para fechar os avançados setFiltroCidade(""); setFiltroEstado(""); setIdadeMinima(""); setIdadeMaxima(""); setDataInicial(""); setDataFinal(""); }; ======= fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctors", requestOptions) .then(response => response.json()) .then(result => {setMedicos(result); console.log(result)}) .catch(error => console.log('error', error)); }, []); >>>>>>> main // Buscar médicos da API useEffect(() => { const authHeader = getAuthorizationHeader() console.log(authHeader, 'aqui autorização') var myHeaders = new Headers(); myHeaders.append("apikey", API_KEY); myHeaders.append("Authorization", `${authHeader}`); var requestOptions = { method: 'GET', headers: myHeaders, redirect: 'follow' }; fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctors", requestOptions) .then(response => response.json()) .then(result => setMedicos(result)) .catch(error => console.log('error', error)); }, [isAuthenticated, getAuthorizationHeader]); // ✨ FILTRO CORRIGIDO - Baseado na estrutura real dos dados const medicosFiltrados = Array.isArray(medicos) ? medicos.filter((medico) => { // Filtro por nome OU CPF - usando campos reais da API const buscaNome = medico.full_name?.toLowerCase().includes(search.toLowerCase()); const buscaCPF = medico.cpf?.toLowerCase().includes(search.toLowerCase()); const buscaEmail = medico.email?.toLowerCase().includes(search.toLowerCase()); const passaBusca = search === "" || buscaNome || buscaCPF || buscaEmail; // Filtro por especialidade - ajustando para campo real const passaEspecialidade = filtroEspecialidade === "Todos" || medico.specialty === filtroEspecialidade; // REMOVIDO: Filtro VIP - Não é mais utilizado // const passaVIP = filtroVIP ? medico.vip === true : true; // Filtro aniversariante const passaAniversario = filtroAniversariante ? ehAniversariante(medico.birth_date) : true; // Filtros avançados - ajustando para campos reais const passaCidade = filtroCidade ? medico.city?.toLowerCase().includes(filtroCidade.toLowerCase()) : true; const passaEstado = filtroEstado ? medico.state?.toLowerCase().includes(filtroEstado.toLowerCase()) : true; // Filtro por idade - usando birth_date const idade = calcularIdade(medico.birth_date); const passaIdadeMinima = idadeMinima ? idade >= parseInt(idadeMinima) : true; const passaIdadeMaxima = idadeMaxima ? idade <= parseInt(idadeMaxima) : true; // Filtro por data de cadastro - usando created_at ou similar const passaDataInicial = dataInicial ? medico.created_at && new Date(medico.created_at) >= new Date(dataInicial) : true; const passaDataFinal = dataFinal ? medico.created_at && new Date(medico.created_at) <= new Date(dataFinal) : true; // Combinação de todos os filtros (passaVIP removido) const resultado = passaBusca && passaEspecialidade && passaAniversario && passaCidade && passaEstado && passaIdadeMinima && passaIdadeMaxima && passaDataInicial && passaDataFinal; return resultado; }) : []; // Contador de médicos filtrados useEffect(() => { console.log(` Médicos totais: ${medicos.length}, Filtrados: ${medicosFiltrados.length}`); }, [medicos, medicosFiltrados, search]); return ( <>

Lista de Médicos

Médicos Cadastrados

{/* Seção de Filtros */}
{" "} Filtros
{/* Busca por nome OU CPF ou email */}
setSearch(e.target.value)} /> Digite o nome completo ou número do CPF
{/* Filtros Básicos - LADO A LADO */}
{/* REMOVIDO: Botão VIP */}
{/* Botão para mostrar/ocultar filtros avançados */}
{/* Adicionado mt-3 para separar do anterior */}
{/* Filtros Avançados */} {showFiltrosAvancados && (
Filtros Avançados
{/* Localização */}
setFiltroCidade(e.target.value)} />
setFiltroEstado(e.target.value)} />
{/* Intervalo de Idade */}
setIdadeMinima(e.target.value)} min="0" max="150" />
setIdadeMaxima(e.target.value)} min="0" max="150" />
{/* Data de Cadastro */}
setDataInicial(e.target.value)} />
setDataFinal(e.target.value)} />
)}
{/* Informações dos filtros ativos */} {(search || filtroEspecialidade !== "Todos" || filtroAniversariante || // filtroVIP removido filtroCidade || filtroEstado || idadeMinima || idadeMaxima || dataInicial || dataFinal) && (
Filtros ativos:
{search && Busca: "{search}"} {filtroEspecialidade !== "Todos" && Especialidade: {filtroEspecialidade}} {/* REMOVIDO: {filtroVIP && VIP} */} {filtroAniversariante && Aniversariantes} {filtroCidade && Cidade: {filtroCidade}} {filtroEstado && Estado: {filtroEstado}} {idadeMinima && Idade mín: {idadeMinima}} {idadeMaxima && Idade máx: {idadeMaxima}} {dataInicial && Data inicial: {dataInicial}} {dataFinal && Data final: {dataFinal}}
)} {/* Contador de resultados */}
{medicosFiltrados.length} de {medicos.length} médicos encontrados
{/* Tabela de Médicos */}
{medicosFiltrados.length > 0 ? ( medicosFiltrados.map((medico) => ( )) ) : ( )}
Nome CPF Especialidade Email Ações
{medico.full_name} {ehAniversariante(medico.birth_date) && ( )} {/* REMOVIDO: Badge VIP {medico.vip && ( VIP )} */}
{medico.cpf} {medico.specialty || 'Não informado'} {medico.email || 'Não informado'}
Nenhum médico encontrado.
{/* Modal de confirmação */} {showDeleteModal && (
e.target.classList.contains("modal") && setShowDeleteModal(false) } >
Confirmação de Exclusão

Tem certeza que deseja excluir este médico?

)} ); } export default TableDoctor;