diff --git a/src/components/AgendarConsulta/CardConsulta.jsx b/src/components/AgendarConsulta/CardConsulta.jsx index 80566755..f760ae1c 100644 --- a/src/components/AgendarConsulta/CardConsulta.jsx +++ b/src/components/AgendarConsulta/CardConsulta.jsx @@ -4,7 +4,7 @@ import { useAuth } from '../utils/AuthProvider'; import { useNavigate } from 'react-router-dom'; import { useMemo } from 'react'; -const CardConsulta = ( {DadosConsulta, TabelaAgendamento, setShowDeleteModal} ) => { +const CardConsulta = ( {DadosConsulta, TabelaAgendamento, setShowDeleteModal, setDictInfo, setSelectedId} ) => { const navigate = useNavigate(); const {getAuthorizationHeader} = useAuth() @@ -68,7 +68,12 @@ const CardConsulta = ( {DadosConsulta, TabelaAgendamento, setShowDeleteModal} )
{Dia}
+ + +{Dia ? `${Dia?.split('-')[2]}/${Dia?.split('-')[1]}/${Dia?.split('-')[0]}`: ''}
{agendamento.horario}
{`${horario[0]}:${horario[1]}`}
| Seg | -Ter | -Qua | -Qui | -Sex | +Segunda | +Terça | +Quarta | +Quinta | +Sexta |
- {` +${semana[dia].length - 2}`} diff --git a/src/components/AgendarConsulta/TabelaAgendamentoSemana.jsx b/src/components/AgendarConsulta/TabelaAgendamentoSemana.jsx index b6cf99fb..abadc2f3 100644 --- a/src/components/AgendarConsulta/TabelaAgendamentoSemana.jsx +++ b/src/components/AgendarConsulta/TabelaAgendamentoSemana.jsx @@ -6,7 +6,7 @@ import { useEffect, useState, useMemo } from 'react'; import weekOfYear from 'dayjs/plugin/weekOfYear' dayjs.extend(weekOfYear) -const TabelaAgendamentoSemana = ({ agendamentos, ListarDiasdoMes }) => { +const TabelaAgendamentoSemana = ({ agendamentos, ListarDiasdoMes, setShowDeleteModal ,setSelectedId ,setDictInfo}) => { // Armazena o objeto COMPLETO das semanas organizadas const [semanasOrganizadas, setSemanasOrganizadas] = useState({}); @@ -164,31 +164,31 @@ const TabelaAgendamentoSemana = ({ agendamentos, ListarDiasdoMes }) => { {/* Mapeamento de COLUNAS (dias) */}
{semanaParaRenderizar.segunda[indiceLinha]
- ? |
{semanaParaRenderizar.terça[indiceLinha]
- ? |
{semanaParaRenderizar.quarta[indiceLinha]
- ? |
{semanaParaRenderizar.quinta[indiceLinha]
- ? |
{semanaParaRenderizar.sexta[indiceLinha]
- ? |
diff --git a/src/components/AgendarConsulta/style/formagendamentos.css b/src/components/AgendarConsulta/style/formagendamentos.css
index bbd606d6..b42fd96e 100644
--- a/src/components/AgendarConsulta/style/formagendamentos.css
+++ b/src/components/AgendarConsulta/style/formagendamentos.css
@@ -340,4 +340,53 @@ html[data-bs-theme="dark"] svg {
.tipo_atendimento{
margin-left: 3rem;
+}
+
+
+
+/* 1. Estilização Básica e Tamanho (Estado Padrão - Antes de Clicar) */
+.checkbox-customs {
+ /* Remove a aparência padrão do navegador/Bootstrap */
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+
+ /* Define o tamanho desejado */
+ width: 1.2rem; /* Ajuste conforme o seu gosto (ex: 1.2rem = 19.2px) */
+ height: 1.2rem;
+
+ /* Define o visual "branco com borda preta" */
+ background-color: #fff; /* Fundo branco */
+ border: 1px solid #000; /* Borda preta de 1px */
+ border-radius: 0.25rem; /* Borda levemente arredondada (opcional, imita Bootstrap) */
+
+ /* Centraliza o 'check' (quando aparecer) */
+ display: inline-block;
+ vertical-align: middle;
+ cursor: pointer; /* Indica que é clicável */
+
+ /* Adiciona a transição suave */
+ transition: all 0.5s ease; /* Transição em 0.5 segundos para todas as propriedades */
+}
+
+/* 2. Estilização no Estado Clicado (:checked) */
+.checkbox-customs:checked {
+ /* Quando clicado, mantém o fundo branco (se quiser mudar, altere aqui) */
+ background-color: #fff;
+
+ /* Se você quiser que a borda mude de cor ao clicar, altere aqui. */
+ /* border-color: #007bff; */ /* Exemplo: borda azul */
+}
+
+/* 3. Ocultar o 'Check' Padrão e Criar um Check Customizado */
+/* O Bootstrap/Navegador insere um ícone de 'check'. Vamos controlá-lo com background-image. */
+.checkbox-customs:checked {
+ /* Este código do Bootstrap usa um SVG para o ícone de 'check' */
+ /* Aqui, estamos forçando o ícone de 'check' a ser preto para combinar com a borda preta. */
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
+
+ /* Garante que o ícone fique centralizado e preencha o espaço */
+ background-size: 100% 100%;
+ background-position: center;
+ background-repeat: no-repeat;
}
\ No newline at end of file
diff --git a/src/components/AgendarConsulta/style/styleTabelas/tabelames.css b/src/components/AgendarConsulta/style/styleTabelas/tabelames.css
index 99a3bd1b..707823cf 100644
--- a/src/components/AgendarConsulta/style/styleTabelas/tabelames.css
+++ b/src/components/AgendarConsulta/style/styleTabelas/tabelames.css
@@ -18,7 +18,7 @@
/* Cabeçalho */
.tabelamensal thead th {
background-color: #0078d7;
- color: #0078d7;
+ color: white;
font-weight: 600;
border-bottom: 2px solid #0078d7; /* borda inferior mais forte no cabeçalho */
}
diff --git a/src/pages/Agendamento.jsx b/src/pages/Agendamento.jsx
index 6b749ade..176059c1 100644
--- a/src/pages/Agendamento.jsx
+++ b/src/pages/Agendamento.jsx
@@ -21,9 +21,10 @@ import { Search } from 'lucide-react';
-const Agendamento = () => {
+const Agendamento = ({setDictInfo}) => {
const navigate = useNavigate();
+ const [selectedID, setSelectedId] = useState('0')
const [filaEsperaData, setfilaEsperaData] = useState([])
const [FiladeEspera, setFiladeEspera] = useState(false);
const [tabela, setTabela] = useState('diario');
@@ -43,55 +44,78 @@ const Agendamento = () => {
let authHeader = getAuthorizationHeader()
- const FiltrarAgendamentos = async (listaTodosAgendamentos) => {
-
+ 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)
+ // Assumindo que GetDoctorByID e GetPatientByID estão definidos no seu escopo
+ let medico = await GetDoctorByID(doctor_id, authHeader);
+ let paciente = await GetPatientByID(patient_id, authHeader);
- let dicionario = {patientInfo:paciente, doctorInfo:medico, agendamentoInfo:agendamento}
-
+ let dicionario = {
+ agendamento: agendamento,
+ Infos: {
+ nome_nedico: medico.full_name,
+ doctor_id: medico.id,
+ patient_id: paciente[0].id,
+ paciente_nome: paciente[0].full_name,
+ paciente_cpf: paciente[0].cpf
+ }
+ };
+ return dicionario;
+ };
- return dicionario
+ let DictAgendamentosOrganizados = {};
+ let ListaFilaDeEspera = [];
+ // 1. Agrupamento (igual ao seu código original)
+ for (const agendamento of listaTodosAgendamentos) {
+ if (agendamento.status === 'requested') {
+ // Recomenda-se usar Promise.all para melhorar a performance
+ // mas, para manter a estrutura, mantemos o await no loop.
+ 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];
+ }
+ }
}
- let DictAgendamentosOrganizados = {};
- let ListaFilaDeEspera = []
-
- for (let i = 0; i < listaTodosAgendamentos.length; i++) {
- const agendamento = listaTodosAgendamentos[i];
- if(agendamento.status === 'requested'){
-
- let v = await ConfigurarFiladeEspera(agendamento.patient_id, agendamento.doctor_id, agendamento)
-
- ListaFilaDeEspera.push(v)
-
- console.log(ListaFilaDeEspera)
-
+// ----------------------------------------------------------------------
+ // 2. Ordenação Interna: Ordenar os agendamentos por HORÁRIO (do menor para o maior)
+ for (const DiaAgendamento in DictAgendamentosOrganizados) {
+ DictAgendamentosOrganizados[DiaAgendamento].sort((a, b) => {
+ // Compara as strings de data/hora (ISO 8601) diretamente,
+ // que funcionam para ordenação cronológica.
+ if (a.scheduled_at < b.scheduled_at) return -1;
+ if (a.scheduled_at > b.scheduled_at) return 1;
+ return 0;
+ });
}
- else{
- const DiaAgendamento = agendamento.scheduled_at.split("T")[0];
+// ----------------------------------------------------------------------
+ // 3. Ordenação Externa: Ordenar os DIAS (as chaves do objeto)
+ // Para garantir que as chaves fiquem na sequência cronológica correta.
- //console.log(DictAgendamentosOrganizados)
+ // Pega as chaves (datas)
+ const chavesOrdenadas = Object.keys(DictAgendamentosOrganizados).sort((a, b) => {
+ // Compara as chaves de data (strings 'YYYY-MM-DD')
+ if (a < b) return -1;
+ if (a > b) return 1;
+ return 0;
+ });
- 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);
- setfilaEsperaData(ListaFilaDeEspera)
-
- }
+ // Cria um novo objeto no formato desejado, garantindo a ordem das chaves
+ let DictAgendamentosFinal = {};
+ for (const data of chavesOrdenadas) {
+ DictAgendamentosFinal[data] = DictAgendamentosOrganizados[data];
+ }
+ setAgendamentosOrganizados(DictAgendamentosFinal); // Use o objeto final ordenado
+ setfilaEsperaData(ListaFilaDeEspera);
+};
// Requisição inicial para mostrar os agendamentos do banco de dados
useEffect(() => {
@@ -141,7 +165,25 @@ const Agendamento = () => {
}
}, [FiltredTodosMedicos]);
+const deleteConsulta = (selectedPatientId) => {
+ console.log("tentando apagar")
+ var myHeaders = new Headers();
+ myHeaders.append("Authorization", authHeader);
+ myHeaders.append("apikey", API_KEY)
+var requestOptions = {
+ method: 'DELETE',
+ redirect: 'follow',
+ headers: myHeaders
+};
+
+fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${selectedPatientId}`, requestOptions)
+ .then(response => response.json())
+ .then(result => console.log(result))
+ .catch(error => console.log('error', error));
+
+}
+
/**
* Filtra todos os agendamentos em um objeto aninhado (data -> [agendamentos])
@@ -340,9 +382,9 @@ const handleSearchMedicos = (term) => {
Nome |
- Email |
- CPF |
+ Telefone |
+
Telefone |
Entrou na fila de espera |
+ Ações |
|
- {item.patientInfo[0].full_name} {} |
- {} |
+ |
+ {item.Infos?.paciente_nome} {} {} |
{} |
+ |
+
+
+
+
+
+ - Tem certeza que deseja excluir este paciente? + Tem certeza que deseja excluir este agendamento?
-
diff --git a/src/perfis/perfil_secretaria/PerfilSecretaria.jsx b/src/perfis/perfil_secretaria/PerfilSecretaria.jsx
index 1dc5146d..cc8daecc 100644
--- a/src/perfis/perfil_secretaria/PerfilSecretaria.jsx
+++ b/src/perfis/perfil_secretaria/PerfilSecretaria.jsx
@@ -1,6 +1,6 @@
//import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import { Routes, Route } from "react-router-dom";
-
+import { useState } from "react";
import Sidebar from "../../components/Sidebar";
import FinanceiroDashboard from "../../pages/FinanceiroDashboard";
import SecretariaItems from "../../data/sidebar-items-secretaria.json";
@@ -19,6 +19,7 @@ import FormDisponibilidade from "../../components/AgendarConsulta/FormDisponibil
import AgendamentoEditPage from "../../pages/AgendamentoEditPage";
function PerfilSecretaria({ onLogout }) {
+ const [DictInfo, setDictInfo] = useState({})
return (
//
@@ -34,8 +35,8 @@ function PerfilSecretaria({ onLogout }) {
|
|---|