diff --git a/src/components/FormCriarExcecao.jsx b/src/components/FormCriarExcecao.jsx
index b53bb26..9323a4f 100644
--- a/src/components/FormCriarExcecao.jsx
+++ b/src/components/FormCriarExcecao.jsx
@@ -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}
/>
-
-
- {/* Removendo o campo solicitante, pois não está no payload da API de exceções */}
-
diff --git a/src/pages/ExcecoesDisponibilidade.jsx b/src/pages/ExcecoesDisponibilidade.jsx
index e0f39ca..db2e034 100644
--- a/src/pages/ExcecoesDisponibilidade.jsx
+++ b/src/pages/ExcecoesDisponibilidade.jsx
@@ -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 " 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 = () => {