Updates de exceção

This commit is contained in:
Eduarda-SS 2025-10-28 22:57:08 -03:00
parent a996de3edd
commit 626fcc8124
2 changed files with 11 additions and 40 deletions

View File

@ -1,9 +1,6 @@
// src/components/FormCriarExcecao.jsx
import React, { useState } from "react";
import { useAuth } from "./utils/AuthProvider"; // <-- added
import API_KEY from "./utils/apiKeys"; // <-- added
// Assumindo que você usa o mesmo estilo
import { useAuth } from "./utils/AuthProvider";
import API_KEY from "./utils/apiKeys";
import "./AgendarConsulta/style/formagendamentos.css";
@ -11,7 +8,7 @@ const ENDPOINT_CRIAR_EXCECAO = "https://yuanqfswhberkoevtmfr.supabase.co/rest/v1
const FormCriarExcecao = ({ onCancel, doctorID }) => {
const { getAuthorizationHeader, user, getUserInfo } = useAuth(); // useAuth inside component
const { getAuthorizationHeader, user, getUserInfo } = useAuth();
const [dadosAtendimento, setDadosAtendimento] = useState({
profissional: doctorID || '',
tipoAtendimento: '',
@ -35,17 +32,14 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
const { profissional, dataAtendimento, tipoAtendimento, inicio, termino, motivo } = dadosAtendimento;
// Validação
if (!profissional || !dataAtendimento || !tipoAtendimento || !motivo) {
alert("Por favor, preencha o ID do Profissional, Data, Tipo e Motivo.");
return;
}
// Adiciona ":00" se o campo de hora estiver preenchido
const startTime = inicio ? inicio + ":00" : null;
const endTime = termino ? termino + ":00" : null;
// resolve authorization header and try to get current user id for created_by
let authHeader = "";
try {
authHeader = getAuthorizationHeader ? getAuthorizationHeader() : "";
@ -53,7 +47,6 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
console.warn("Não foi possível obter Authorization header via useAuth()", err);
}
// try to resolve created_by (se disponível no contexto)
let createdBy = user?.id || null;
if (!createdBy && typeof getUserInfo === "function") {
try {
@ -63,7 +56,7 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
console.warn("getUserInfo falhou:", err);
}
}
// fallback localStorage (opcional)
if (!createdBy) {
try {
const stored = localStorage.getItem("user");
@ -81,13 +74,13 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
start_time: startTime,
end_time: endTime,
reason: motivo,
created_by: createdBy // pode ser null se não encontrado
created_by: createdBy
});
var myHeaders = new Headers();
if (authHeader) myHeaders.append("Authorization", authHeader);
myHeaders.append("Content-Type", "application/json");
if (API_KEY) myHeaders.append("apikey", API_KEY); // <-- added
if (API_KEY) myHeaders.append("apikey", API_KEY);
var requestOptions = {
method: 'POST',
@ -109,7 +102,7 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
if (response.ok || response.status === 201) {
console.log("Exceção criada com sucesso:", result);
alert(`Exceção criada! Detalhes: ${result.id || JSON.stringify(result)}`);
onCancel(true); // Indica sucesso para o componente pai recarregar
onCancel(true);
} else {
console.error("Erro ao criar exceção:", result);
alert(`Erro ao criar exceção. Status: ${response.status}. Detalhes: ${result.message || JSON.stringify(result)}`);
@ -186,10 +179,6 @@ const FormCriarExcecao = ({ onCancel, doctorID }) => {
onChange={handleAtendimentoChange}
/>
</div>
<div className="campo-de-input">
{/* Removendo o campo solicitante, pois não está no payload da API de exceções */}
</div>
</div>
</section>

View File

@ -1,6 +1,5 @@
import React, { useState, useEffect, useCallback, useMemo } from 'react';
import dayjs from 'dayjs';
// Adicionar locale e plugin se quiser exibir o nome do mês em português
import 'dayjs/locale/pt-br';
import weekday from 'dayjs/plugin/weekday';
import FormCriarExcecao from '../components/FormCriarExcecao';
@ -13,12 +12,8 @@ import API_KEY from '../components/utils/apiKeys';
dayjs.extend(weekday);
dayjs.locale('pt-br');
// --- Configurações da API Supabase ---
const ENDPOINT_BASE = "https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctor_exceptions";
// const AUTH_TOKEN = "SEU_TOKEN_DE_AUTORIZACAO_AQUI"; // removed
// ------------------------------------
// Função auxiliar para calcular o range de datas
const getDateRange = (date, view) => {
const startDayjs = dayjs(date);
let fromDate, toDate, titleRange;
@ -36,8 +31,6 @@ const getDateRange = (date, view) => {
weekStart = startDayjs.weekday(1); // Vai para a segunda-feira desta semana
}
// Se a data de filtro for hoje (quinta), weekStart é a segunda-feira.
// O Supabase filtra por dia. O range deve incluir a semana inteira.
const weekEnd = weekStart.add(6, 'day');
fromDate = weekStart.format('YYYY-MM-DD');
@ -58,7 +51,7 @@ const getDateRange = (date, view) => {
const ExcecoesDisponibilidade = () => {
const { getAuthorizationHeader } = useAuth(); // hook must be at top level of component
const { getAuthorizationHeader } = useAuth();
const [pageNovaExcecao, setPageNovaExcecao] = useState(false);
const [excecoes, setExcecoes] = useState([]);
const [loading, setLoading] = useState(false);
@ -66,32 +59,27 @@ const ExcecoesDisponibilidade = () => {
const [filtroMedicoId, setFiltroMedicoId] = useState('');
const [filtroData, setFiltroData] = useState(dayjs().format('YYYY-MM-DD'));
// Estado para controlar a visualização ('diario', 'semanal', 'mensal')
const [visualizacao, setVisualizacao] = useState('diario');
// helper to get Authorization header string (uses AuthProvider)
const resolveAuthHeader = () => {
try {
const h = getAuthorizationHeader(); // returns "Bearer <token>" or ''
const h = getAuthorizationHeader();
return h || '';
} catch {
return '';
}
}
// Função para buscar as exceções (ACEITA RANGE)
const fetchExcecoes = useCallback(async (fromDate, toDate, doctorId) => {
setLoading(true);
let url = `${ENDPOINT_BASE}?select=*`;
// Filtro por ID do Médico
if (doctorId) {
url += `&doctor_id=eq.${doctorId}`;
}
// FILTRO PRINCIPAL: INTERVALO DE DATAS USANDO gte (>=) e lte (<=)
url += `&date=gte.${fromDate}&date=lte.${toDate}`;
const myHeaders = new Headers();
@ -126,18 +114,15 @@ const ExcecoesDisponibilidade = () => {
}
}, [getAuthorizationHeader]);
// Calcula o range de datas e o título a ser exibido
const { fromDate, toDate, titleRange } = useMemo(() =>
getDateRange(filtroData, visualizacao),
[filtroData, visualizacao]
);
// Efeito para carregar exceções quando os filtros e a visualização mudam
useEffect(() => {
fetchExcecoes(fromDate, toDate, filtroMedicoId);
}, [fetchExcecoes, filtroMedicoId, fromDate, toDate]); // Dependências atualizadas
}, [fetchExcecoes, filtroMedicoId, fromDate, toDate]);
// Deleta uma exceção pelo id e atualiza a lista localmente
const deleteExcecao = async (id) => {
if (!window.confirm("Confirma exclusão desta exceção?")) return;
const myHeaders = new Headers();
@ -153,7 +138,6 @@ const ExcecoesDisponibilidade = () => {
redirect: 'follow'
});
if (res.ok) {
// remove locally
setExcecoes(prev => prev.filter(x => x.id !== id));
} else {
const text = await res.text();
@ -271,8 +255,6 @@ const ExcecoesDisponibilidade = () => {
<button
className="btn btn-sm btn-edit"
onClick={() => {
// Implementar edição conforme fluxo do seu app.
// Aqui apenas abre o formulário pré-preenchendo o doctorID.
setFiltroMedicoId(exc.doctor_id || '');
setPageNovaExcecao(true);
}}