diff --git a/src/components/AgendarConsulta/TabelaAgendamentoSemana.jsx b/src/components/AgendarConsulta/TabelaAgendamentoSemana.jsx
index 0f5979c..84958f1 100644
--- a/src/components/AgendarConsulta/TabelaAgendamentoSemana.jsx
+++ b/src/components/AgendarConsulta/TabelaAgendamentoSemana.jsx
@@ -67,9 +67,9 @@ const TabelaAgendamentoSemana = ({ agendamentos, ListarDiasdoMes, setShowDeleteM
break
}
}
-
+ console.log(semanas)
return semanas
- }, [agendamentos, AnoAtual]) // Adicionei AnoAtual como dependência por segurança
+ }, [agendamentos, AnoAtual])
// --- EFEITO PARA POPULAR O ESTADO ---
@@ -159,25 +159,26 @@ const TabelaAgendamentoSemana = ({ agendamentos, ListarDiasdoMes, setShowDeleteM
{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(
- {/* Célula para Horário (Pode ser ajustado para mostrar o horário real) */}
+
|
- {`${horario[0]}:${horario[1]}`}
+ {/* {`${horario[0]}:${horario[1]}`} */}
|
{/* Mapeamento de COLUNAS (dias) */}
- {semanaParaRenderizar.segunda[indiceLinha]
- ?
+ {semanaParaRenderizar?.segunda[indiceLinha]
+ ?
: null
}
|
diff --git a/src/pages/Agendamento.jsx b/src/pages/Agendamento.jsx
index 84b7b78..505be04 100644
--- a/src/pages/Agendamento.jsx
+++ b/src/pages/Agendamento.jsx
@@ -23,10 +23,11 @@ import { Search } from 'lucide-react';
const Agendamento = ({setDictInfo}) => {
const navigate = useNavigate();
-
+
+ const [listaTodosAgendamentos, setListaTodosAgendamentos] = useState([])
const [selectedID, setSelectedId] = useState('0')
- const [filaEsperaData, setfilaEsperaData] = useState([])
+ const [filaEsperaData, setFilaEsperaData] = useState([])
const [FiladeEspera, setFiladeEspera] = useState(false);
const [tabela, setTabela] = useState('diario');
const [PageNovaConsulta, setPageConsulta] = useState(false);
@@ -42,72 +43,79 @@ const Agendamento = ({setDictInfo}) => {
const [FiltredTodosMedicos, setFiltredTodosMedicos] = useState([])
const [searchTermDoctor, setSearchTermDoctor] = useState('');
+ const [MedicoFiltrado, setMedicoFiltrado] = useState({id:"vazio"})
+
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)
-
- let dicionario = {
- agendamento: agendamento,
- Infos: {
- nome_medico: medico[0]?.full_name,
- doctor_id: medico[0]?.id,
- patient_id: paciente[0].id,
- paciente_nome: paciente[0].full_name,
- paciente_cpf: paciente[0].cpf
- }
- };
- return dicionario;
- };
-
- let DictAgendamentosOrganizados = {};
- let ListaFilaDeEspera = [];
-
+
+useMemo(() => {
+ if (!listaTodosAgendamentos.length) return { agendamentosOrganizados: {}, filaEsperaData: [] };
+console.log("recarregando")
+ const DictAgendamentosOrganizados = {};
+ const ListaFilaDeEspera = [];
+ const fetchDados = async () => {
for (const agendamento of listaTodosAgendamentos) {
- if (agendamento.status === 'requested') {
- let v = await ConfigurarFiladeEspera(agendamento.patient_id, agendamento.doctor_id, agendamento);
- ListaFilaDeEspera.push(v);
- } else {
- const DiaAgendamento = agendamento.scheduled_at.split("T")[0];
-
- if (DiaAgendamento in DictAgendamentosOrganizados) {
- DictAgendamentosOrganizados[DiaAgendamento].push(agendamento);
- } else {
- DictAgendamentosOrganizados[DiaAgendamento] = [agendamento];
- }
+ 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);
}
- }
- for (const DiaAgendamento in DictAgendamentosOrganizados) {
- DictAgendamentosOrganizados[DiaAgendamento].sort((a, b) => {
- if (a.scheduled_at < b.scheduled_at) return -1;
- if (a.scheduled_at > b.scheduled_at) return 1;
- return 0;
+ const medico = cacheMedicos[agendamento.doctor_id];
+ const paciente = cachePacientes[agendamento.patient_id];
+
+ ListaFilaDeEspera.push({
+ agendamento,
+ Infos: {
+ nome_medico: medico[0]?.full_name,
+ doctor_id: medico[0]?.id,
+ patient_id: paciente[0]?.id,
+ paciente_nome: paciente[0]?.full_name,
+ paciente_cpf: paciente[0]?.cpf,
+ },
});
+ } else {
+ const DiaAgendamento = agendamento.scheduled_at.split("T")[0];
+
+ if (DiaAgendamento in DictAgendamentosOrganizados) {
+ DictAgendamentosOrganizados[DiaAgendamento].push(agendamento);
+ } else {
+ DictAgendamentosOrganizados[DiaAgendamento] = [agendamento];
+ }
+ }
}
+ // Ordenar por data
+ for (const DiaAgendamento in DictAgendamentosOrganizados) {
+ DictAgendamentosOrganizados[DiaAgendamento].sort((a, b) => a.scheduled_at.localeCompare(b.scheduled_at));
+ }
- const chavesOrdenadas = Object.keys(DictAgendamentosOrganizados).sort((a, b) => {
- if (a < b) return -1;
- if (a > b) return 1;
- return 0;
- });
+ const chavesOrdenadas = Object.keys(DictAgendamentosOrganizados).sort();
- let DictAgendamentosFinal = {};
+ const DictAgendamentosFinal = {};
for (const data of chavesOrdenadas) {
- DictAgendamentosFinal[data] = DictAgendamentosOrganizados[data];
+ DictAgendamentosFinal[data] = DictAgendamentosOrganizados[data];
}
- setAgendamentosOrganizados(DictAgendamentosFinal);
- setfilaEsperaData(ListaFilaDeEspera);
-};
+
+ setAgendamentosOrganizados(DictAgendamentosFinal);
+ setFilaEsperaData(ListaFilaDeEspera);
+ };
+
+ fetchDados();
+
+ return { agendamentosOrganizados: DictAgendamentosOrganizados, filaEsperaData: ListaFilaDeEspera };
+}, [listaTodosAgendamentos]); // 👉 só recalcula quando a lista muda
+
+
useEffect(() => {
var myHeaders = new Headers();
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)
.then(response => response.json())
- .then(result => {FiltrarAgendamentos(result);console.log(result)})
+ .then(result => {setListaTodosAgendamentos(result);console.log(result)})
.catch(error => console.log('error', error));
const PegarTodosOsMedicos = async () => {
@@ -135,24 +143,7 @@ const Agendamento = ({setDictInfo}) => {
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) => {
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(() => {
@@ -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) => {
setSearchTermDoctor(term);
if (term.trim() === '') {
setFiltredTodosMedicos([]);
+ setMedicoFiltrado({id:"vazio"})
+ //2 FiltrarAgendamentos()
return;
}
+ if (FiltredTodosMedicos.length === 1){
+ setMedicoFiltrado({...FiltredTodosMedicos[0]})
+ }
const filtered = ListaDeMedicos.filter(medico =>
medico.nomeMedico.toLowerCase().includes(term.toLowerCase())
@@ -252,8 +269,6 @@ const handleSearchMedicos = (term) => {
};
- const handleClickCancel = () => setPageConsulta(false)
-
return (
Agendar nova consulta
@@ -306,6 +321,8 @@ const handleSearchMedicos = (term) => {
className='dropdown-item'
onClick={() => {
setSearchTermDoctor(medico.nomeMedico);
+ setFiltredTodosMedicos([]);
+ setMedicoFiltrado(medico)
}}
>
{medico.nomeMedico}