import React, { useState, useMemo, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import API_KEY from '../components/utils/apiKeys.js'; import AgendamentoCadastroManager from './AgendamentoCadastroManager.jsx'; import TabelaAgendamentoDia from '../components/AgendarConsulta/TabelaAgendamentoDia'; import TabelaAgendamentoSemana from '../components/AgendarConsulta/TabelaAgendamentoSemana'; import TabelaAgendamentoMes from '../components/AgendarConsulta/TabelaAgendamentoMes'; import FormNovaConsulta from '../components/AgendarConsulta/FormNovaConsulta'; import { GetAllDoctors } from '../components/utils/Functions-Endpoints/Doctor.js'; import { useAuth } from '../components/utils/AuthProvider.js'; // ✨ NOVO: Caminho de importação corrigido com base na sua estrutura de pastas import AgendamentosMes from '../components/AgendarConsulta/DadosConsultasMock.js'; import dayjs from 'dayjs'; import "./style/Agendamento.css"; import './style/FilaEspera.css'; import { Search } from 'lucide-react'; const Agendamento = () => { const navigate = useNavigate(); const [FiladeEspera, setFiladeEspera] = useState(false); const [tabela, setTabela] = useState('diario'); const [PageNovaConsulta, setPageConsulta] = useState(false); const [searchTerm, setSearchTerm] = useState(''); const [agendamentos, setAgendamentos] = useState() const {getAuthorizationHeader} = useAuth() const [DictAgendamentosOrganizados, setAgendamentosOrganizados ] = useState({}) const [showDeleteModal, setShowDeleteModal] = useState(false) const [AgendamentoFiltrado, setAgendamentoFiltrado] = useState() const [ListaDeMedicos, setListaDeMedicos] = useState([]) const [FiltredTodosMedicos, setFiltredTodosMedicos] = useState([]) const [searchTermDoctor, setSearchTermDoctor] = useState(''); let authHeader = getAuthorizationHeader() const FiltrarAgendamentos = (listaTodosAgendamentos) => { let DictAgendamentosOrganizados = {}; for (let i = 0; i < listaTodosAgendamentos.length; i++) { const agendamento = listaTodosAgendamentos[i]; const DiaAgendamento = agendamento.scheduled_at.split("T")[0]; //console.log(DictAgendamentosOrganizados) if (DiaAgendamento in DictAgendamentosOrganizados) { // já existe a data → adiciona na lista DictAgendamentosOrganizados[DiaAgendamento].push(agendamento); } else { // não existe → cria nova key com uma lista DictAgendamentosOrganizados[DiaAgendamento] = [agendamento]; } } setAgendamentosOrganizados(DictAgendamentosOrganizados); } // Requisição inicial para mostrar os agendamentos do banco de dados useEffect(() => { var myHeaders = new Headers(); myHeaders.append("Authorization", authHeader); myHeaders.append("apikey", API_KEY) var requestOptions = { method: 'GET', headers: myHeaders, redirect: 'follow' }; 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);}) .catch(error => console.log('error', error)); const PegarTodosOsMedicos = async () => { let lista = [] const TodosOsMedicos = await GetAllDoctors(authHeader) //console.log(TodosOsMedicos, "tentativa") for(let d = 0; TodosOsMedicos.length > d; d++){ lista.push({nomeMedico: TodosOsMedicos[d].full_name, idMedico: TodosOsMedicos[d].id })} setListaDeMedicos(lista) } 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) // AQUI VOCÊ PODE APLICAR SUA LÓGICA FINAL: // Ex: setar um novo estado com os agendamentos filtrados, se for necessário: // setAgendamentosFiltrados(agendamentosDoMedico); } else { // Opcional: Limpar a lista filtrada se a busca não for mais única // setAgendamentosFiltrados([]); } }, [FiltredTodosMedicos]); /** * Filtra todos os agendamentos em um objeto aninhado (data -> [agendamentos]) * com base no ID do médico. * * @param {Object} dictAgendamentos - O dicionário de agendamentos. * @param {string} idMedicoFiltrado - O ID do médico (doctor_id) para ser usado como filtro. * @returns {Array} Um array contendo todos os agendamentos que correspondem ao idMedicoFiltrado. */ const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => { // O corpo da função deve usar esses nomes de variáveis: const todasAsListasDeAgendamentos = Object.values(dictAgendamentos); const todosOsAgendamentos = todasAsListasDeAgendamentos.flat(); const agendamentosFiltrados = todosOsAgendamentos.filter(agendamento => agendamento.doctor_id === idMedicoFiltrado ); return agendamentosFiltrados; }; // Dados da fila de espera (sem alteração) const filaEsperaData = [ { nome: 'Ricardo Pereira', email: 'ricardo.pereira@gmail.com', cpf: '444.777.666-55', telefone: '(79) 99123-4567', entrada: '25/09/2025 às 08:00' }, { nome: 'Ana Costa', email: 'ana.costa@gmail.com', cpf: '321.654.987-00', telefone: '(79) 97777-3333', entrada: '25/09/2025 às 08:30' }, { nome: 'Lucas Martins', email: 'lucas.martins@gmail.com', cpf: '777.666.555-33', telefone: '(79) 99654-3210', entrada: '25/09/2025 às 09:00' }, { nome: 'João Souza', email: 'joao.souza@gmail.com', cpf: '987.654.321-00', telefone: '(79) 98888-2222', entrada: '25/09/2025 às 14:00' }, { nome: 'Maria Silva', email: 'maria.silva@gmail.com', cpf: '123.456.789-00', telefone: '(79) 99999-1111', entrada: '25/09/2025 às 14:30' }, { nome: 'Fernanda Lima', email: 'fernanda.lima@gmail.com', cpf: '888.999.000-22', telefone: '(79) 98877-6655', entrada: '26/09/2025 às 09:30' }, { nome: 'Carlos Andrade', email: 'carlos.andrade@gmail.com', cpf: '222.555.888-11', telefone: '(79) 99876-5432', entrada: '26/09/2025 às 10:00' }, { nome: 'Juliana Oliveira', email: 'juliana.o@gmail.com', cpf: '111.222.333-44', telefone: '(79) 98765-1234', entrada: '26/09/2025 às 11:30' }, ]; // Filtro da fila de espera (sem alteração) const filteredFila = filaEsperaData.filter(item => item.nome.toLowerCase().includes(searchTerm.toLowerCase()) || item.email.toLowerCase().includes(searchTerm.toLowerCase()) || item.cpf.includes(searchTerm) || item.telefone.includes(searchTerm) ); // Lógica para filtrar os dados da AGENDA (AgendamentosMes) const filteredAgendamentos = useMemo(() => { if (!searchTerm.trim()) { return AgendamentosMes; } const lowerCaseSearchTerm = searchTerm.toLowerCase(); const filteredData = {}; for (const semana in AgendamentosMes) { filteredData[semana] = {}; for (const dia in AgendamentosMes[semana]) { filteredData[semana][dia] = AgendamentosMes[semana][dia].filter(agendamento => agendamento.status === 'vazio' || (agendamento.paciente && agendamento.paciente.toLowerCase().includes(lowerCaseSearchTerm)) ); } } return filteredData; }, [searchTerm]); const ListarDiasdoMes = (ano, mes) => { let segundas = []; let tercas = []; let quartas = []; let quintas = []; let sextas = [] const base = dayjs(`${ano}-${mes}-01`) const DiasnoMes = base.daysInMonth() for (let d = 1; d <= DiasnoMes; d++) { const data = dayjs(`${ano}-${mes}-${d}`) const dia = data.format('dddd') switch (dia) { case 'Monday': segundas.push(d); break case 'Tuesday': tercas.push(d); break case 'Wednesday': quartas.push(d); break case 'Thursday': quintas.push(d); break case 'Friday': sextas.push(d); break default: break } } let ListaDiasDatas = {segundas:segundas,tercas:tercas,quartas: quartas,quintas: quintas,sextas: sextas} return ListaDiasDatas } const handleClickAgendamento = (agendamento) => { if (agendamento.status !== 'vazio') return else setPageConsulta(true) }; const handleSearchMedicos = (term) => { setSearchTermDoctor(term); if (term.trim() === '') { setFiltredTodosMedicos([]); return; } // Lógica simples de filtragem: const filtered = ListaDeMedicos.filter(medico => medico.nomeMedico.toLowerCase().includes(term.toLowerCase()) ); setFiltredTodosMedicos(filtered); }; const handleClickCancel = () => setPageConsulta(false) return (
{medico.nomeMedico}
| Nome | CPF | Telefone | Entrou na fila de espera | |
|---|---|---|---|---|
| {item.nome} | {item.email} | {item.cpf} | {item.telefone} | {item.entrada} |
Tem certeza que deseja excluir este paciente?