import API_KEY from '../components/utils/apiKeys'; import { Link } from 'react-router-dom'; import { useState, useEffect } from 'react'; import { useAuth } from '../components/utils/AuthProvider'; import { GetPatientByID } from '../components/utils/Functions-Endpoints/Patient'; import { useNavigate } from 'react-router-dom'; import html2pdf from 'html2pdf.js'; import TiptapViewer from './TiptapViewer'; import './styleMedico/DoctorRelatorioManager.css'; const DoctorRelatorioManager = () => { const navigate = useNavigate(); const { getAuthorizationHeader } = useAuth(); let authHeader = getAuthorizationHeader(); const [relatoriosOriginais, setRelatoriosOriginais] = useState([]); const [pacientesData, setPacientesData] = useState({}); const [showModal, setShowModal] = useState(false); const [relatorioModal, setRelatorioModal] = useState(null); const [termoPesquisa, setTermoPesquisa] = useState(''); const [filtroExame, setFiltroExame] = useState(''); const [examesDisponiveis, setExamesDisponiveis] = useState([]); const [relatoriosFinais, setRelatoriosFinais] = useState([]); const [paginaAtual, setPaginaAtual] = useState(1); const [itensPorPagina, setItensPorPagina] = useState(10); useEffect(() => { const buscarPacientes = async () => { const pacientesMap = {}; for (const relatorio of relatoriosOriginais) { if (!pacientesMap[relatorio.patient_id]) { try { const paciente = await GetPatientByID(relatorio.patient_id, authHeader); if (paciente && paciente.length > 0) { pacientesMap[relatorio.patient_id] = paciente[0]; } } catch (error) { console.error('Erro ao buscar paciente:', error); } } } setPacientesData(pacientesMap); }; if (relatoriosOriginais.length > 0) { buscarPacientes(); } }, [relatoriosOriginais, authHeader]); useEffect(() => { let resultados = relatoriosOriginais; if (termoPesquisa.trim()) { const termo = termoPesquisa.toLowerCase().trim(); resultados = resultados.filter(relatorio => { const paciente = pacientesData[relatorio.patient_id]; if (!paciente) return false; const nomeMatch = paciente.full_name?.toLowerCase().includes(termo); const cpfMatch = paciente.cpf?.includes(termoPesquisa); return nomeMatch || cpfMatch; }); } if (filtroExame.trim()) { const termoExame = filtroExame.toLowerCase().trim(); resultados = resultados.filter(relatorio => relatorio.exam?.toLowerCase().includes(termoExame) ); } setRelatoriosFinais(resultados); setPaginaAtual(1); }, [termoPesquisa, filtroExame, relatoriosOriginais, pacientesData]); useEffect(() => { 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/reports?patient_id&status", requestOptions) .then(response => response.json()) .then(data => { setRelatoriosOriginais(data); setRelatoriosFinais(data); const examesUnicos = [...new Set(data.map(relatorio => relatorio.exam).filter(exam => exam))]; setExamesDisponiveis(examesUnicos); }) .catch(error => console.log('error', error)); }, [authHeader]); const totalPaginas = Math.ceil(relatoriosFinais.length / itensPorPagina); const indiceInicial = (paginaAtual - 1) * itensPorPagina; const indiceFinal = indiceInicial + itensPorPagina; const relatoriosPaginados = relatoriosFinais.slice(indiceInicial, indiceFinal); const limparFiltros = () => { setTermoPesquisa(''); setFiltroExame(''); setPaginaAtual(1); }; const abrirModal = (relatorio) => { setRelatorioModal(relatorio); setShowModal(true); }; const BaixarPDFdoRelatorio = (nome_paciente) => { const elemento = document.getElementById("folhaA4"); const opt = { margin: 0, filename: `relatorio_${nome_paciente || "paciente"}.pdf`, html2canvas: { scale: 2 }, jsPDF: { unit: "mm", format: "a4", orientation: "portrait" }, }; html2pdf().set(opt).from(elemento).save(); }; const irParaPagina = (pagina) => { setPaginaAtual(pagina); }; const avancarPagina = () => { if (paginaAtual < totalPaginas) { setPaginaAtual(paginaAtual + 1); } }; const voltarPagina = () => { if (paginaAtual > 1) { setPaginaAtual(paginaAtual - 1); } }; const gerarNumerosPaginas = () => { const paginas = []; const paginasParaMostrar = 5; let inicio = Math.max(1, paginaAtual - Math.floor(paginasParaMostrar / 2)); let fim = Math.min(totalPaginas, inicio + paginasParaMostrar - 1); inicio = Math.max(1, fim - paginasParaMostrar + 1); for (let i = inicio; i <= fim; i++) { paginas.push(i); } return paginas; }; return (
Clinica Rise up
Dr - CRM/SP 123456
Avenida - (79) 9 4444-4444
Paciente: {pacientesData[relatorioModal.patient_id]?.full_name}
Data de nascimento: {pacientesData[relatorioModal.patient_id]?.birth_date}
Data do exame: { }
Exame: {relatorioModal.exam}
Conteúdo do Relatório:
Dr {relatorioModal.required_by}
Emitido em: 0
| Paciente | CPF | Exame | |
|---|---|---|---|
| {paciente?.full_name || 'Carregando...'} | {paciente?.cpf || 'Carregando...'} | {relatorio.exam} |
|
|
Nenhum relatório encontrado com os filtros aplicados. {(termoPesquisa || filtroExame) && ( )} |
|||