From 626fcc81241cf01061646a47d685aa13f26f4d49 Mon Sep 17 00:00:00 2001 From: Eduarda-SS <137419071+Eduarda-SS@users.noreply.github.com> Date: Tue, 28 Oct 2025 22:57:08 -0300 Subject: [PATCH] =?UTF-8?q?Updates=20de=20exce=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/FormCriarExcecao.jsx | 27 ++++++++------------------- src/pages/ExcecoesDisponibilidade.jsx | 24 +++--------------------- 2 files changed, 11 insertions(+), 40 deletions(-) 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 = () => {