Agendamento
This commit is contained in:
parent
d649d0ebc1
commit
ba98884667
@ -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();
|
||||||
@ -176,8 +170,7 @@ fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${sel
|
|||||||
.catch(error => console.log('error', error));
|
.catch(error => console.log('error', error));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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>
|
||||||
@ -320,20 +308,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>
|
||||||
|
|
||||||
@ -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} />
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user