Impedimento de refetching e melhoria do filtro do medico
This commit is contained in:
parent
a5cd4d3447
commit
8a3d6e0305
@ -67,9 +67,9 @@ const TabelaAgendamentoSemana = ({ agendamentos, ListarDiasdoMes, setShowDeleteM
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
console.log(semanas)
|
||||||
return semanas
|
return semanas
|
||||||
}, [agendamentos, AnoAtual]) // Adicionei AnoAtual como dependência por segurança
|
}, [agendamentos, AnoAtual])
|
||||||
|
|
||||||
// --- EFEITO PARA POPULAR O ESTADO ---
|
// --- EFEITO PARA POPULAR O ESTADO ---
|
||||||
|
|
||||||
@ -159,25 +159,26 @@ const TabelaAgendamentoSemana = ({ agendamentos, ListarDiasdoMes, setShowDeleteM
|
|||||||
<tbody>
|
<tbody>
|
||||||
{indicesDeLinha.map((indiceLinha) => {
|
{indicesDeLinha.map((indiceLinha) => {
|
||||||
|
|
||||||
let schedulet_at = semanaParaRenderizar.segunda[indiceLinha].scheduled_at.split("T")
|
//let schedulet_at = semanaParaRenderizar.segunda[indiceLinha].scheduled_at.split("T")
|
||||||
|
|
||||||
let horario = schedulet_at[1].split(":")
|
// let horario = schedulet_at[1].split(":")
|
||||||
|
|
||||||
console.log(horario)
|
|
||||||
|
console.log(semanaParaRenderizar, "aqui")
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<tr key={indiceLinha}>
|
<tr key={indiceLinha}>
|
||||||
{/* Célula para Horário (Pode ser ajustado para mostrar o horário real) */}
|
|
||||||
<td>
|
<td>
|
||||||
|
|
||||||
<p className='horario-texto'> {`${horario[0]}:${horario[1]}`} </p>
|
{/* <p className='horario-texto'> {`${horario[0]}:${horario[1]}`} </p>*/}
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
{/* Mapeamento de COLUNAS (dias) */}
|
{/* Mapeamento de COLUNAS (dias) */}
|
||||||
<td>
|
<td>
|
||||||
{semanaParaRenderizar.segunda[indiceLinha]
|
{semanaParaRenderizar?.segunda[indiceLinha]
|
||||||
? <CardConsulta DadosConsulta={semanaParaRenderizar.segunda[indiceLinha]} setShowDeleteModal={setShowDeleteModal} setSelectedId={setSelectedId} setDictInfo={setDictInfo} />
|
? <CardConsulta DadosConsulta={semanaParaRenderizar?.segunda[indiceLinha]} setShowDeleteModal={setShowDeleteModal} setSelectedId={setSelectedId} setDictInfo={setDictInfo} />
|
||||||
: null
|
: null
|
||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@ -24,9 +24,10 @@ import { Search } from 'lucide-react';
|
|||||||
const Agendamento = ({setDictInfo}) => {
|
const Agendamento = ({setDictInfo}) => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
const [listaTodosAgendamentos, setListaTodosAgendamentos] = useState([])
|
||||||
|
|
||||||
const [selectedID, setSelectedId] = useState('0')
|
const [selectedID, setSelectedId] = useState('0')
|
||||||
const [filaEsperaData, setfilaEsperaData] = useState([])
|
const [filaEsperaData, setFilaEsperaData] = useState([])
|
||||||
const [FiladeEspera, setFiladeEspera] = useState(false);
|
const [FiladeEspera, setFiladeEspera] = useState(false);
|
||||||
const [tabela, setTabela] = useState('diario');
|
const [tabela, setTabela] = useState('diario');
|
||||||
const [PageNovaConsulta, setPageConsulta] = useState(false);
|
const [PageNovaConsulta, setPageConsulta] = useState(false);
|
||||||
@ -42,39 +43,46 @@ const Agendamento = ({setDictInfo}) => {
|
|||||||
const [FiltredTodosMedicos, setFiltredTodosMedicos] = useState([])
|
const [FiltredTodosMedicos, setFiltredTodosMedicos] = useState([])
|
||||||
const [searchTermDoctor, setSearchTermDoctor] = useState('');
|
const [searchTermDoctor, setSearchTermDoctor] = useState('');
|
||||||
|
|
||||||
|
const [MedicoFiltrado, setMedicoFiltrado] = useState({id:"vazio"})
|
||||||
|
|
||||||
|
|
||||||
let authHeader = getAuthorizationHeader()
|
let authHeader = getAuthorizationHeader()
|
||||||
|
|
||||||
|
const cacheMedicos = {};
|
||||||
|
const cachePacientes = {};
|
||||||
|
|
||||||
const FiltrarAgendamentos = async (listaTodosAgendamentos) => {
|
|
||||||
const ConfigurarFiladeEspera = async (patient_id, doctor_id, agendamento) => {
|
|
||||||
|
|
||||||
let medico = await GetDoctorByID(doctor_id, authHeader);
|
|
||||||
let paciente = await GetPatientByID(patient_id, authHeader);
|
|
||||||
|
|
||||||
console.log(medico)
|
useMemo(() => {
|
||||||
|
if (!listaTodosAgendamentos.length) return { agendamentosOrganizados: {}, filaEsperaData: [] };
|
||||||
|
console.log("recarregando")
|
||||||
|
const DictAgendamentosOrganizados = {};
|
||||||
|
const ListaFilaDeEspera = [];
|
||||||
|
|
||||||
let dicionario = {
|
const fetchDados = async () => {
|
||||||
agendamento: agendamento,
|
for (const agendamento of listaTodosAgendamentos) {
|
||||||
|
if (agendamento.status === "requested") {
|
||||||
|
// Cache de médico e paciente
|
||||||
|
if (!cacheMedicos[agendamento.doctor_id]) {
|
||||||
|
cacheMedicos[agendamento.doctor_id] = await GetDoctorByID(agendamento.doctor_id, authHeader);
|
||||||
|
}
|
||||||
|
if (!cachePacientes[agendamento.patient_id]) {
|
||||||
|
cachePacientes[agendamento.patient_id] = await GetPatientByID(agendamento.patient_id, authHeader);
|
||||||
|
}
|
||||||
|
|
||||||
|
const medico = cacheMedicos[agendamento.doctor_id];
|
||||||
|
const paciente = cachePacientes[agendamento.patient_id];
|
||||||
|
|
||||||
|
ListaFilaDeEspera.push({
|
||||||
|
agendamento,
|
||||||
Infos: {
|
Infos: {
|
||||||
nome_medico: medico[0]?.full_name,
|
nome_medico: medico[0]?.full_name,
|
||||||
doctor_id: medico[0]?.id,
|
doctor_id: medico[0]?.id,
|
||||||
patient_id: paciente[0].id,
|
patient_id: paciente[0]?.id,
|
||||||
paciente_nome: paciente[0].full_name,
|
paciente_nome: paciente[0]?.full_name,
|
||||||
paciente_cpf: paciente[0].cpf
|
paciente_cpf: paciente[0]?.cpf,
|
||||||
}
|
},
|
||||||
};
|
});
|
||||||
return dicionario;
|
|
||||||
};
|
|
||||||
|
|
||||||
let DictAgendamentosOrganizados = {};
|
|
||||||
let ListaFilaDeEspera = [];
|
|
||||||
|
|
||||||
|
|
||||||
for (const agendamento of listaTodosAgendamentos) {
|
|
||||||
if (agendamento.status === 'requested') {
|
|
||||||
let v = await ConfigurarFiladeEspera(agendamento.patient_id, agendamento.doctor_id, agendamento);
|
|
||||||
ListaFilaDeEspera.push(v);
|
|
||||||
} else {
|
} else {
|
||||||
const DiaAgendamento = agendamento.scheduled_at.split("T")[0];
|
const DiaAgendamento = agendamento.scheduled_at.split("T")[0];
|
||||||
|
|
||||||
@ -86,28 +94,28 @@ const Agendamento = ({setDictInfo}) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ordenar por data
|
||||||
for (const DiaAgendamento in DictAgendamentosOrganizados) {
|
for (const DiaAgendamento in DictAgendamentosOrganizados) {
|
||||||
DictAgendamentosOrganizados[DiaAgendamento].sort((a, b) => {
|
DictAgendamentosOrganizados[DiaAgendamento].sort((a, b) => a.scheduled_at.localeCompare(b.scheduled_at));
|
||||||
if (a.scheduled_at < b.scheduled_at) return -1;
|
|
||||||
if (a.scheduled_at > b.scheduled_at) return 1;
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const chavesOrdenadas = Object.keys(DictAgendamentosOrganizados).sort();
|
||||||
|
|
||||||
const chavesOrdenadas = Object.keys(DictAgendamentosOrganizados).sort((a, b) => {
|
const DictAgendamentosFinal = {};
|
||||||
if (a < b) return -1;
|
|
||||||
if (a > b) return 1;
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
|
|
||||||
let DictAgendamentosFinal = {};
|
|
||||||
for (const data of chavesOrdenadas) {
|
for (const data of chavesOrdenadas) {
|
||||||
DictAgendamentosFinal[data] = DictAgendamentosOrganizados[data];
|
DictAgendamentosFinal[data] = DictAgendamentosOrganizados[data];
|
||||||
}
|
}
|
||||||
|
|
||||||
setAgendamentosOrganizados(DictAgendamentosFinal);
|
setAgendamentosOrganizados(DictAgendamentosFinal);
|
||||||
setfilaEsperaData(ListaFilaDeEspera);
|
setFilaEsperaData(ListaFilaDeEspera);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fetchDados();
|
||||||
|
|
||||||
|
return { agendamentosOrganizados: DictAgendamentosOrganizados, filaEsperaData: ListaFilaDeEspera };
|
||||||
|
}, [listaTodosAgendamentos]); // 👉 só recalcula quando a lista muda
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
var myHeaders = new Headers();
|
var myHeaders = new Headers();
|
||||||
myHeaders.append("Authorization", authHeader);
|
myHeaders.append("Authorization", authHeader);
|
||||||
@ -121,7 +129,7 @@ const Agendamento = ({setDictInfo}) => {
|
|||||||
|
|
||||||
fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?select&doctor_id&patient_id&status&scheduled_at&order&limit&offset", requestOptions)
|
fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?select&doctor_id&patient_id&status&scheduled_at&order&limit&offset", requestOptions)
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(result => {FiltrarAgendamentos(result);console.log(result)})
|
.then(result => {setListaTodosAgendamentos(result);console.log(result)})
|
||||||
.catch(error => console.log('error', error));
|
.catch(error => console.log('error', error));
|
||||||
|
|
||||||
const PegarTodosOsMedicos = async () => {
|
const PegarTodosOsMedicos = async () => {
|
||||||
@ -135,24 +143,7 @@ const Agendamento = ({setDictInfo}) => {
|
|||||||
PegarTodosOsMedicos()
|
PegarTodosOsMedicos()
|
||||||
|
|
||||||
}, [])
|
}, [])
|
||||||
useEffect(() => {
|
|
||||||
console.log("mudou FiltredTodosMedicos:", FiltredTodosMedicos);
|
|
||||||
if (FiltredTodosMedicos.length === 1) {
|
|
||||||
const unicoMedico = FiltredTodosMedicos[0];
|
|
||||||
console.log(unicoMedico)
|
|
||||||
const idMedicoFiltrado = unicoMedico.idMedico;
|
|
||||||
console.log(`Médico único encontrado: ${unicoMedico.nomeMedico}. ID: ${idMedicoFiltrado}`);
|
|
||||||
|
|
||||||
const agendamentosDoMedico = filtrarAgendamentosPorMedico(
|
|
||||||
DictAgendamentosOrganizados,
|
|
||||||
idMedicoFiltrado
|
|
||||||
);
|
|
||||||
console.log(`Total de agendamentos filtrados para este médico: ${agendamentosDoMedico.length}`);
|
|
||||||
console.log("Lista completa de Agendamentos do Médico:", agendamentosDoMedico);
|
|
||||||
FiltrarAgendamentos(agendamentosDoMedico)
|
|
||||||
|
|
||||||
}
|
|
||||||
}, [FiltredTodosMedicos]);
|
|
||||||
|
|
||||||
const deleteConsulta = (selectedPatientId) => {
|
const deleteConsulta = (selectedPatientId) => {
|
||||||
var myHeaders = new Headers();
|
var myHeaders = new Headers();
|
||||||
@ -179,17 +170,6 @@ const deleteConsulta = (selectedPatientId) => {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => {
|
|
||||||
|
|
||||||
const todasAsListasDeAgendamentos = Object.values(dictAgendamentos);
|
|
||||||
const todosOsAgendamentos = todasAsListasDeAgendamentos.flat();
|
|
||||||
|
|
||||||
const agendamentosFiltrados = todosOsAgendamentos.filter(agendamento =>
|
|
||||||
agendamento.doctor_id === idMedicoFiltrado
|
|
||||||
);
|
|
||||||
|
|
||||||
return agendamentosFiltrados;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const filteredAgendamentos = useMemo(() => {
|
const filteredAgendamentos = useMemo(() => {
|
||||||
@ -238,12 +218,49 @@ const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
console.log("mudou FiltredTodosMedicos:", FiltredTodosMedicos);
|
||||||
|
if (MedicoFiltrado.id != "vazio" ) {
|
||||||
|
const unicoMedico = MedicoFiltrado;
|
||||||
|
console.log(unicoMedico)
|
||||||
|
const idMedicoFiltrado = unicoMedico.idMedico;
|
||||||
|
console.log(`Médico único encontrado: ${unicoMedico.nomeMedico}. ID: ${idMedicoFiltrado}`);
|
||||||
|
|
||||||
|
const agendamentosDoMedico = filtrarAgendamentosPorMedico(
|
||||||
|
DictAgendamentosOrganizados,
|
||||||
|
idMedicoFiltrado
|
||||||
|
);
|
||||||
|
console.log(`Total de agendamentos filtrados para este médico: ${agendamentosDoMedico.length}`);
|
||||||
|
console.log("Lista completa de Agendamentos do Médico:", agendamentosDoMedico);
|
||||||
|
|
||||||
|
//FiltrarAgendamentos(agendamentosDoMedico)
|
||||||
|
|
||||||
|
}
|
||||||
|
}, [FiltredTodosMedicos, MedicoFiltrado]);
|
||||||
|
|
||||||
|
const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => {
|
||||||
|
|
||||||
|
const todasAsListasDeAgendamentos = Object.values(dictAgendamentos);
|
||||||
|
const todosOsAgendamentos = todasAsListasDeAgendamentos.flat();
|
||||||
|
|
||||||
|
const agendamentosFiltrados = todosOsAgendamentos.filter(agendamento =>
|
||||||
|
agendamento.doctor_id === idMedicoFiltrado
|
||||||
|
);
|
||||||
|
|
||||||
|
return agendamentosFiltrados;
|
||||||
|
};
|
||||||
|
|
||||||
const handleSearchMedicos = (term) => {
|
const handleSearchMedicos = (term) => {
|
||||||
setSearchTermDoctor(term);
|
setSearchTermDoctor(term);
|
||||||
if (term.trim() === '') {
|
if (term.trim() === '') {
|
||||||
setFiltredTodosMedicos([]);
|
setFiltredTodosMedicos([]);
|
||||||
|
setMedicoFiltrado({id:"vazio"})
|
||||||
|
//2 FiltrarAgendamentos()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (FiltredTodosMedicos.length === 1){
|
||||||
|
setMedicoFiltrado({...FiltredTodosMedicos[0]})
|
||||||
|
}
|
||||||
|
|
||||||
const filtered = ListaDeMedicos.filter(medico =>
|
const filtered = ListaDeMedicos.filter(medico =>
|
||||||
medico.nomeMedico.toLowerCase().includes(term.toLowerCase())
|
medico.nomeMedico.toLowerCase().includes(term.toLowerCase())
|
||||||
@ -252,8 +269,6 @@ const handleSearchMedicos = (term) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const handleClickCancel = () => setPageConsulta(false)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<h1>Agendar nova consulta</h1>
|
<h1>Agendar nova consulta</h1>
|
||||||
@ -306,6 +321,8 @@ const handleSearchMedicos = (term) => {
|
|||||||
className='dropdown-item'
|
className='dropdown-item'
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setSearchTermDoctor(medico.nomeMedico);
|
setSearchTermDoctor(medico.nomeMedico);
|
||||||
|
setFiltredTodosMedicos([]);
|
||||||
|
setMedicoFiltrado(medico)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<p>{medico.nomeMedico} </p>
|
<p>{medico.nomeMedico} </p>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user