import React from 'react' import "./style.css" import "../pages/style/TablePaciente.css" import CardConsultaPaciente from './CardConsultaPaciente' import { useNavigate } from 'react-router-dom' import { useEffect, useState, useMemo } from 'react' import API_KEY from '../components/utils/apiKeys' import { useAuth } from '../components/utils/AuthProvider' import { GetPatientByID } from '../components/utils/Functions-Endpoints/Patient' import { GetDoctorByID } from '../components/utils/Functions-Endpoints/Doctor' import { UserInfos } from '../components/utils/Functions-Endpoints/General' import dayjs from 'dayjs' import TabelaAgendamentoDia from "../components/AgendarConsulta/TabelaAgendamentoDia" const ConsultasPaciente = ({ setDictInfo }) => { const { getAuthorizationHeader } = useAuth() const [agendamentosOrganizados, setAgendamentosOrganizados] = useState({}) const [listaTodasConsultas, setListaTodasConsultas] = useState([]) const [patientID, setPatientID] = useState("") const [showDeleteModal, setShowDeleteModal] = useState(false) const [selectedID, setSelectedId] = useState("") let authHeader = getAuthorizationHeader() const [motivoCancelamento, setMotivoCancelamento] = useState("") const [consultas, setConsultas] = useState([]) const [consultasOrganizadas, setConsultasOrganizadas] = useState({}) const [filaDeEspera, setFilaDeEspera] = useState([]) const [viewFila, setViewFila] = useState(false) const [listaConsultasID, setListaConsultaID] = useState([]) const [coresConsultas,setCoresConsultas] = useState([]) const [showConfirmModal, setShowConfirmModal] = useState(false) const [waitlistSearch, setWaitlistSearch] = useState(''); const [waitSortKey, setWaitSortKey] = useState(null); // 'paciente' | 'medico' | 'data' | null const [waitSortDir, setWaitSortDir] = useState('asc'); // 'asc' | 'desc' const [waitPage, setWaitPage] = useState(1); const [waitPerPage, setWaitPerPage] = useState(10); useEffect(() => { console.log(listaConsultasID, coresConsultas, "ojwhdofigewfey7few0fr74r") }, [coresConsultas, listaConsultasID]) useMemo(() => { let conjuntoConsultas = {} let filaEspera = [] const fetchInfosConsultas = async (consulta) => { //console.log(doctor, "PACIENTE TRAZIDO PELO ") //let consultaMelhorada = {...consulta, paciente_nome:paciente[0].full_name, medico_nome:doctor[0].full_name } //console.log(consultaMelhorada,"ID DO MEDICO") for(let i = 0; listaTodasConsultas.length > i; i++){ let consulta = listaTodasConsultas[i] let doctor = await GetDoctorByID(consulta.doctor_id, authHeader) let paciente = await GetPatientByID(consulta.patient_id, authHeader) consulta = {...consulta, medico_nome:doctor[0]?.full_name, paciente_nome:paciente[0]?.full_name} if(consulta.status === "requested"){ filaEspera.push(consulta) }else{ let data = consulta.scheduled_at.split("T")[0] let chavesConsultas = Object.keys(conjuntoConsultas) if(chavesConsultas.includes(data)){ let lista = conjuntoConsultas[data] lista.push(consulta) conjuntoConsultas = {...conjuntoConsultas, [data]:lista} }else{ conjuntoConsultas = {...conjuntoConsultas, [data]:[consulta] } } } } setConsultasOrganizadas(conjuntoConsultas) setFilaDeEspera(filaEspera) } console.log("so muda") if(!listaTodasConsultas.length) return console.log(filaEspera, "fila de espera") fetchInfosConsultas(); }, [listaTodasConsultas]) useEffect(() => { let userInfos = UserInfos(authHeader) const fetchConsultas = async () => { try { const myHeaders = new Headers(); myHeaders.append("Authorization", authHeader); myHeaders.append("apikey", API_KEY) const requestOptions = { method: 'GET', headers: myHeaders, redirect: 'follow' }; const response = await fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?patient_id=eq.${"6e7f8829-0574-42df-9290-8dbb70f75ada"}`, requestOptions); const result = await response.json(); setListaTodasConsultas(result); } catch (error) { console.log('error', error); } }; fetchConsultas(); }, []); const navigate = useNavigate() const confirmConsulta = (selectedPatientId) => { var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); myHeaders.append('apikey', API_KEY) myHeaders.append("authorization", authHeader) var raw = JSON.stringify({ "status":"confirmed" }); var requestOptions = { method: 'PATCH', headers: myHeaders, body: raw, redirect: 'follow' }; fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${selectedPatientId}`, requestOptions) .then(response => {if(response.status !== 200)(console.log(response))}) .then(result => console.log(result)) .catch(error => console.log('error', error)); } const deleteConsulta = async (ID) => { try { const myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); myHeaders.append('apikey', API_KEY); myHeaders.append("authorization", authHeader); const raw = JSON.stringify({ "status": "cancelled", "cancellation_reason":motivoCancelamento }); const requestOptions = { method: 'PATCH', headers: myHeaders, body: raw, redirect: 'follow' }; const response = await fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${ID}`, requestOptions); if (!response.ok) { const errorText = await response.text(); throw new Error(`Falha ao cancelar consulta: ${response.status} - ${errorText}`); } setConsultas(prevConsultas => prevConsultas.filter(consulta => consulta.id !== ID)); console.log("Consulta cancelada com sucesso!"); alert("Consulta cancelada com sucesso!"); } catch (error) { console.error('Erro ao cancelar a consulta:', error); alert('Erro ao cancelar a consulta. Veja o console.'); } } const filaEsperaFiltrada = useMemo(() => { if (!waitlistSearch.trim()) return filaDeEspera; const term = waitlistSearch.toLowerCase(); return filaDeEspera.filter(item => { const paciente = item?.paciente_nome?.toLowerCase() || ''; const medico = item?.medico_nome?.toLowerCase() || ''; return paciente.includes(term) || medico.includes(term); }); }, [waitlistSearch, filaDeEspera]); const applySortingWaitlist = (arr) => { if (!Array.isArray(arr) || !waitSortKey) return arr; const copy = [...arr]; if (waitSortKey === 'paciente') { copy.sort((a, b) => (a?.paciente_nome || '').localeCompare((b?.paciente_nome || ''), undefined, { sensitivity: 'base' })); } else if (waitSortKey === 'medico') { copy.sort((a, b) => (a?.medico_nome || '').localeCompare((b?.medico_nome || ''), undefined, { sensitivity: 'base' })); } else if (waitSortKey === 'data') { copy.sort((a, b) => new Date(a?.created_at || 0) - new Date(b?.created_at || 0)); } if (waitSortDir === 'desc') copy.reverse(); return copy; }; const filaEsperaOrdenada = applySortingWaitlist(filaEsperaFiltrada); const waitTotalPages = Math.ceil(filaEsperaFiltrada.length / waitPerPage) || 1; const waitIndiceInicial = (waitPage - 1) * waitPerPage; const waitIndiceFinal = waitIndiceInicial + waitPerPage; const filaEsperaPaginada = filaEsperaOrdenada.slice(waitIndiceInicial, waitIndiceFinal); const gerarNumerosWaitPages = () => { const paginas = []; const paginasParaMostrar = 5; let inicio = Math.max(1, waitPage - Math.floor(paginasParaMostrar / 2)); let fim = Math.min(waitTotalPages, inicio + paginasParaMostrar - 1); inicio = Math.max(1, fim - paginasParaMostrar + 1); for (let i = inicio; i <= fim; i++) { paginas.push(i); } return paginas; }; useEffect(() => { setWaitPage(1); }, [waitlistSearch, waitSortKey, waitSortDir]); return (
| Nome do Paciente | CPF | Médico Solicitado | Data da Solicitação | Ações |
|---|---|---|---|---|
| {item?.paciente_nome} | {item?.paciente_cpf} | {item?.medico_nome} | {dayjs(item?.created_at).format('DD/MM/YYYY HH:mm')} | |
|
Nenhuma solicitação encontrada. |
||||
Qual o motivo do cancelamento?
Tem certeza que deseja retirar o cancelamento ?