import React, { useState, useEffect } from "react"; import { Link } from "react-router-dom"; import API_KEY from "../components/utils/apiKeys"; import { useAuth } from "../components/utils/AuthProvider"; import "./style/TablePaciente.css"; import ModalErro from "../components/utils/fetchErros/ModalErro"; import manager from "../components/utils/fetchErros/ManagerFunction"; function TablePaciente({ setCurrentPage, setPatientID }) { const { getAuthorizationHeader, isAuthenticated, RefreshingToken } = useAuth(); const [pacientes, setPacientes] = useState([]); const [search, setSearch] = useState(""); const [filtroConvenio, setFiltroConvenio] = useState("Todos"); const [filtroVIP, setFiltroVIP] = useState(false); const [filtroAniversariante, setFiltroAniversariante] = useState(false); 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(""); const [showDeleteModal, setShowDeleteModal] = useState(false); const [selectedPatientId, setSelectedPatientId] = useState(null); const [showModalError, setShowModalError] = useState(""); const [ ErrorInfo, setErrorInfo] = useState({}) const GetAnexos = async (id) => { var myHeaders = new Headers(); myHeaders.append("Authorization", "Bearer "); var requestOptions = { method: "GET", headers: myHeaders, redirect: "follow", }; try { const response = await fetch( `https://mock.apidog.com/m1/1053378-0-default/pacientes/${id}/anexos`, requestOptions ); const result = await response.json(); return result.data; } catch (error) { console.log("error", error); return []; } }; const DeleteAnexo = async (patientID) => { const RespostaGetAnexos = await GetAnexos(patientID); for (let i = 0; i < RespostaGetAnexos.length; i++) { const idAnexo = RespostaGetAnexos[i].id; console.log("anexos", RespostaGetAnexos); var myHeaders = new Headers(); myHeaders.append("Authorization", "Bearer "); var requestOptions = { method: "DELETE", headers: myHeaders, redirect: "follow", }; fetch( `https://mock.apidog.com/m1/1053378-0-default/pacientes/${patientID}/anexos/${idAnexo}`, requestOptions ) .then((response) => response.text()) .then((result) => console.log("anexo excluido com sucesso", result)) .catch((error) => console.log("error", error)); } }; const deletePatient = async (id) => { const authHeader = getAuthorizationHeader() console.log(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/patients?id=eq.${id}`, requestOptions ); setPacientes((prev) => prev.filter((p) => p.id !== id)); console.log(result) } catch (error) { console.log("Deu problema", error); } finally { setShowDeleteModal(false); } }; 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/patient", requestOptions) .then(response => { // 1. VERIFICAÇÃO DO STATUS HTTP (Se não for 2xx) if (!response.ok) { return response.json().then(errorData => { const errorObject = { httpStatus: response.status, apiCode: errorData.code, message: errorData.message || response.statusText, details: errorData.details, hint: errorData.hint }; console.error("ERRO DETALHADO:", errorObject); throw errorObject; }); } // 3. Se a resposta for OK (2xx), processamos o JSON normalmente return response.json(); }) .then(result => { setPacientes(result); console.log("Sucesso:", result); setShowModalError(false); }) .catch(error => { manager(setShowModalError, RefreshingToken, setErrorInfo, error) }); }, [isAuthenticated, getAuthorizationHeader]); 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() ); }; 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; }; const limparFiltros = () => { setSearch(""); setFiltroConvenio("Todos"); setFiltroVIP(false); setFiltroAniversariante(false); setFiltroCidade(""); setFiltroEstado(""); setIdadeMinima(""); setIdadeMaxima(""); setDataInicial(""); setDataFinal(""); }; const pacientesFiltrados = Array.isArray(pacientes) ? pacientes.filter((paciente) => { const buscaNome = paciente.full_name?.toLowerCase().includes(search.toLowerCase()); const buscaCPF = paciente.cpf?.toLowerCase().includes(search.toLowerCase()); const passaBusca = search === "" || buscaNome || buscaCPF; const passaConvenio = filtroConvenio === "Todos" || paciente.insurance_plan === filtroConvenio; const passaVIP = filtroVIP ? paciente.vip === true : true; const passaAniversario = filtroAniversariante ? ehAniversariante(paciente.birth_date) : true; const passaCidade = filtroCidade ? paciente.city?.toLowerCase().includes(filtroCidade.toLowerCase()) : true; const passaEstado = filtroEstado ? paciente.state?.toLowerCase().includes(filtroEstado.toLowerCase()) : true; const idade = calcularIdade(paciente.birth_date); const passaIdadeMinima = idadeMinima ? idade >= parseInt(idadeMinima) : true; const passaIdadeMaxima = idadeMaxima ? idade <= parseInt(idadeMaxima) : true; const passaDataInicial = dataInicial ? paciente.last_appointment && new Date(paciente.last_appointment) >= new Date(dataInicial) : true; const passaDataFinal = dataFinal ? paciente.last_appointment && new Date(paciente.last_appointment) <= new Date(dataFinal) : true; const resultado = passaBusca && passaConvenio && passaVIP && passaAniversario && passaCidade && passaEstado && passaIdadeMinima && passaIdadeMaxima && passaDataInicial && passaDataFinal; return resultado; }) : []; useEffect(() => { console.log(` Pacientes totais: ${pacientes?.length}, Filtrados: ${pacientesFiltrados?.length}`); }, [pacientes, pacientesFiltrados, search]); return ( <>

Lista de Pacientes

Pacientes Cadastrados

{" "} Filtros
setSearch(e.target.value)} /> Digite o nome completo ou número do CPF
{showFiltrosAvancados && (
Filtros Avançados
setFiltroCidade(e.target.value)} />
setFiltroEstado(e.target.value)} />
setIdadeMinima(e.target.value)} min="0" max="150" />
setIdadeMaxima(e.target.value)} min="0" max="150" />
setDataInicial(e.target.value)} />
setDataFinal(e.target.value)} />
)}
{(search || filtroConvenio !== "Todos" || filtroVIP || filtroAniversariante || filtroCidade || filtroEstado || idadeMinima || idadeMaxima || dataInicial || dataFinal) && (
Filtros ativos:
{search && Busca: "{search}"} {filtroConvenio !== "Todos" && Convênio: {filtroConvenio}} {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}}
)}
{pacientesFiltrados?.length} de {pacientes?.length} pacientes encontrados
{pacientesFiltrados.length > 0 ? ( pacientesFiltrados.map((paciente) => ( )) ) : ( )}
Nome CPF Convênio Email Ações
{paciente.full_name}
{ehAniversariante(paciente.birth_date) && ( )} {paciente.vip && ( VIP )}
{paciente.cpf} {paciente.insurance_plan || 'Não informado'} {paciente.email || 'Não informado'}
Nenhum paciente encontrado.
{showDeleteModal && (
e.target.classList.contains("modal") && setShowDeleteModal(false) } >
Confirmação de Exclusão

Tem certeza que deseja excluir este paciente?

)} ); } export default TablePaciente;