Agendamento

This commit is contained in:
pedrofedericoo 2025-10-21 14:33:17 -03:00
parent d649d0ebc1
commit ba98884667

View File

@ -68,7 +68,7 @@ const Agendamento = ({setDictInfo}) => { // Mantido setDictInfo (versão main)
let DictAgendamentosOrganizados = {}; let DictAgendamentosOrganizados = {};
let ListaFilaDeEspera = []; let ListaFilaDeEspera = [];
// 1. Agrupamento
for (const agendamento of listaTodosAgendamentos) { for (const agendamento of listaTodosAgendamentos) {
if (agendamento.status === 'requested') { if (agendamento.status === 'requested') {
let v = await ConfigurarFiladeEspera(agendamento.patient_id, agendamento.doctor_id, agendamento); let v = await ConfigurarFiladeEspera(agendamento.patient_id, agendamento.doctor_id, agendamento);
@ -84,7 +84,6 @@ const Agendamento = ({setDictInfo}) => { // Mantido setDictInfo (versão main)
} }
} }
// 2. Ordenação Interna: Ordenar os agendamentos por HORÁRIO (do menor para o maior)
for (const DiaAgendamento in DictAgendamentosOrganizados) { for (const DiaAgendamento in DictAgendamentosOrganizados) {
DictAgendamentosOrganizados[DiaAgendamento].sort((a, b) => { DictAgendamentosOrganizados[DiaAgendamento].sort((a, b) => {
if (a.scheduled_at < b.scheduled_at) return -1; if (a.scheduled_at < b.scheduled_at) return -1;
@ -93,7 +92,7 @@ const Agendamento = ({setDictInfo}) => { // Mantido setDictInfo (versão main)
}); });
} }
// 3. Ordenação Externa: Ordenar os DIAS
const chavesOrdenadas = Object.keys(DictAgendamentosOrganizados).sort((a, b) => { const chavesOrdenadas = Object.keys(DictAgendamentosOrganizados).sort((a, b) => {
if (a < b) return -1; if (a < b) return -1;
if (a > b) return 1; if (a > b) return 1;
@ -107,8 +106,6 @@ const Agendamento = ({setDictInfo}) => { // Mantido setDictInfo (versão main)
setAgendamentosOrganizados(DictAgendamentosFinal); setAgendamentosOrganizados(DictAgendamentosFinal);
setfilaEsperaData(ListaFilaDeEspera); setfilaEsperaData(ListaFilaDeEspera);
}; };
// Requisição inicial (Mesclado: Mantido o da MAIN, pois o da disponibilidade2 não tem a ordenação/fila de espera no .then)
useEffect(() => { useEffect(() => {
var myHeaders = new Headers(); var myHeaders = new Headers();
myHeaders.append("Authorization", authHeader); myHeaders.append("Authorization", authHeader);
@ -136,8 +133,6 @@ const Agendamento = ({setDictInfo}) => { // Mantido setDictInfo (versão main)
PegarTodosOsMedicos() PegarTodosOsMedicos()
}, []) }, [])
// Efeito de filtro de médico (Presente em ambas, mantida a lógica da MAIN/disponibilidade2 que se complementam)
useEffect(() => { useEffect(() => {
console.log("mudou FiltredTodosMedicos:", FiltredTodosMedicos); console.log("mudou FiltredTodosMedicos:", FiltredTodosMedicos);
if (FiltredTodosMedicos.length === 1) { if (FiltredTodosMedicos.length === 1) {
@ -157,7 +152,6 @@ const Agendamento = ({setDictInfo}) => { // Mantido setDictInfo (versão main)
} }
}, [FiltredTodosMedicos]); }, [FiltredTodosMedicos]);
// Função de Delete (Presente apenas na MAIN)
const deleteConsulta = (selectedPatientId) => { const deleteConsulta = (selectedPatientId) => {
console.log("tentando apagar") console.log("tentando apagar")
var myHeaders = new Headers(); var myHeaders = new Headers();
@ -177,7 +171,6 @@ fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${sel
} }
// Função auxiliar de filtro de médico (Presente em ambas, mantida a versão mais limpa)
const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => { const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => {
const todasAsListasDeAgendamentos = Object.values(dictAgendamentos); const todasAsListasDeAgendamentos = Object.values(dictAgendamentos);
@ -192,7 +185,6 @@ const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => {
// Lógica para filtrar os dados da AGENDA (useMemo) - (Presente em ambas, mantida a da MAIN, que está melhor formatada)
const filteredAgendamentos = useMemo(() => { const filteredAgendamentos = useMemo(() => {
if (!searchTerm.trim()) { if (!searchTerm.trim()) {
return AgendamentosMes; return AgendamentosMes;
@ -212,7 +204,6 @@ const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => {
return filteredData; return filteredData;
}, [searchTerm]); }, [searchTerm]);
// ListarDiasdoMes (Presente em ambas)
const ListarDiasdoMes = (ano, mes) => { const ListarDiasdoMes = (ano, mes) => {
let segundas = []; let tercas = []; let quartas = []; let quintas = []; let sextas = [] let segundas = []; let tercas = []; let quartas = []; let quintas = []; let sextas = []
const base = dayjs(`${ano}-${mes}-01`) const base = dayjs(`${ano}-${mes}-01`)
@ -233,14 +224,13 @@ const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => {
return ListaDiasDatas return ListaDiasDatas
} }
// handleClickAgendamento (Presente em ambas)
const handleClickAgendamento = (agendamento) => { const handleClickAgendamento = (agendamento) => {
if (agendamento.status !== 'vazio') return if (agendamento.status !== 'vazio') return
else setPageConsulta(true) else setPageConsulta(true)
}; };
// handleSearchMedicos (Presente em ambas)
const handleSearchMedicos = (term) => { const handleSearchMedicos = (term) => {
setSearchTermDoctor(term); setSearchTermDoctor(term);
if (term.trim() === '') { if (term.trim() === '') {
@ -248,7 +238,6 @@ const handleSearchMedicos = (term) => {
return; return;
} }
// Lógica simples de filtragem:
const filtered = ListaDeMedicos.filter(medico => const filtered = ListaDeMedicos.filter(medico =>
medico.nomeMedico.toLowerCase().includes(term.toLowerCase()) medico.nomeMedico.toLowerCase().includes(term.toLowerCase())
); );
@ -262,7 +251,7 @@ const handleSearchMedicos = (term) => {
<div> <div>
<h1>Agendar nova consulta</h1> <h1>Agendar nova consulta</h1>
{/* Mesclagem dos botões de navegação: Adicionar Consulta da main + Gerenciamento da disponibilidade2 */}
<div className="btns-gerenciamento-e-consulta" style={{ display: 'flex', gap: '10px', marginBottom: '20px' }}> <div className="btns-gerenciamento-e-consulta" style={{ display: 'flex', gap: '10px', marginBottom: '20px' }}>
<button className="btn btn-primary" onClick={() => setPageConsulta(true)}> <button className="btn btn-primary" onClick={() => setPageConsulta(true)}>
<i className="bi bi-plus-circle"></i> Adicionar Consulta <i className="bi bi-plus-circle"></i> Adicionar Consulta
@ -296,7 +285,7 @@ const handleSearchMedicos = (term) => {
type="text" type="text"
placeholder="Filtrar atendimento por médico..." placeholder="Filtrar atendimento por médico..."
value={searchTermDoctor} value={searchTermDoctor}
onChange={(e) => handleSearchMedicos(e.target.value)} // Chama a nova função de filtro onChange={(e) => handleSearchMedicos(e.target.value)}
/> />
</div> </div>
</div> </div>
@ -309,8 +298,7 @@ const handleSearchMedicos = (term) => {
key={medico.id} key={medico.id}
className='dropdown-item' className='dropdown-item'
onClick={() => { onClick={() => {
setSearchTermDoctor(medico.nomeMedico); // Preenche o input setSearchTermDoctor(medico.nomeMedico);
// setFiltredTodosMedicos([]); // Opcional: fechar o dropdown
}} }}
> >
<p>{medico.nomeMedico} </p> <p>{medico.nomeMedico} </p>
@ -321,20 +309,6 @@ const handleSearchMedicos = (term) => {
</div> </div>
</div> </div>
{/* Div da disponibilidade2 - Unidade/Selecionar Profissional (manter) */}
<div className="unidade-selecionarprofissional">
<select>
<option value="" disabled selected>
Unidade
</option>
<option value="">Unidade Central</option>
<option value="">Unidade Zona Norte</option>
<option value="">Unidade Zona Oeste</option>
</select>
<input type="text" placeholder="Selecionar profissional" />
</div>
</div> </div>
<div className='container-btns-agenda-fila_esepera'> <div className='container-btns-agenda-fila_esepera'>
@ -392,7 +366,6 @@ const handleSearchMedicos = (term) => {
) )
: :
( (
// Fila de Espera - Restaurada a versão da MAIN com dados reais
<div className="fila-container"> <div className="fila-container">
<div className="fila-header"> <div className="fila-header">
<input <input
@ -420,13 +393,13 @@ const handleSearchMedicos = (term) => {
<td> <p>{item.Infos?.paciente_nome} </p> </td> <td> <p>{item.Infos?.paciente_nome} </p> </td>
<td><p>{item.Infos?.paciente_cpf} </p></td> <td><p>{item.Infos?.paciente_cpf} </p></td>
<td><p>{item.Infos?.nome_nedico} </p></td> <td><p>{item.Infos?.nome_nedico} </p></td>
<td>{dayjs(item.agendamento.created_at).format('DD/MM/YYYY HH:mm')}</td> {/* Formatando a data de criação */} <td>{dayjs(item.agendamento.created_at).format('DD/MM/YYYY HH:mm')}</td>
<td> <div className="d-flex gap-2"> <td> <div className="d-flex gap-2">
<button className="btn btn-sm btn-edit" <button className="btn btn-sm btn-edit"
onClick={() => { onClick={() => {
console.log(item, 'item') console.log(item, 'item')
navigate(`${2}/edit`) // Assumindo uma rota base navigate(`${2}/edit`)
setDictInfo(item) setDictInfo(item)
}} }}
> >
@ -454,7 +427,6 @@ const handleSearchMedicos = (term) => {
</section> </section>
</div> </div>
) : ( ) : (
// AgendamentoCadastroManager - (Mesclado: Mantido o setPageConsulta da main)
<AgendamentoCadastroManager setPageConsulta={setPageConsulta} /> <AgendamentoCadastroManager setPageConsulta={setPageConsulta} />
)} )}