import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { getAccessToken } from "../../utils/auth.js"; import { useResponsive } from '../../utils/useResponsive'; export default function MagicLink() { const supabaseUrl = import.meta.env.VITE_SUPABASE_URL; const supabaseAK = import.meta.env.VITE_SUPABASE_ANON_KEY; const navigate = useNavigate(); const [email, setEmail] = useState(""); const [emailError, setEmailError] = useState(''); const [isTouched, setIsTouched] = useState(false); const [errorMessage, setErrorMessage] = useState(''); const [serverError, setServerError] = useState(''); const [serverSucsess, setServerSucsess] = useState(''); const tokenUsuario =getAccessToken() const handleSubmit = async (e) => { e.preventDefault(); const emailValidation = validateEmail(email); if (emailValidation) { // Se houver erros locais, para a execução antes do fetch return; } try { const myHeaders = new Headers(); myHeaders.append("apikey", supabaseAK); myHeaders.append("Authorization", `Bearer ${tokenUsuario}`); myHeaders.append("Content-Type", "application/json"); var raw = JSON.stringify({ email: email, options: { emailRedirectTo: "https://mediconnect-neon.vercel.app/" } }); var requestOptions = { method: 'POST', headers: myHeaders, body: raw, redirect: 'follow' }; const response = await fetch( `${supabaseUrl}/auth/v1/otp`, requestOptions ); const result = await response.json(); console.log("🔗 Retorno da API de acesso único:", result); serverSucsess("Se o e-mail estiver cadastrado, enviamos um link de acesso!"); setEmail(""); } catch (error) { console.error("❌ Erro ao enviar magic link:", error); serverError("Erro ao enviar o link de acesso. Tente novamente."); } }; const validateEmail = (emailValue) => { let error = ''; if (emailValue.trim() === '') { error = 'O e-mail não pode ficar vazio.'; } else if (!emailValue.includes('@') || !emailValue.includes('.')) { error = 'O e-mail deve conter o símbolo "@" e um ponto (".") seguido por uma extensão.'; } // Atualiza o estado de erro específico para o email setEmailError(error); return error; }; const handleEmailChange = (e) => { const newValue = e.target.value; setEmail(newValue); if (isTouched) { validateEmail(newValue); // Valida em tempo real } const { name, value } = e.target; setConta((prev) => ({ ...prev, [name]: value })); }; const handleEmailBlur = (e) => { setIsTouched(true); validateEmail(e.target.value); // Valida ao perder o foco }; return (

Você mais próximo de seu médico

Consultas online e acompanhamento em tempo real.

Agende sem sair de casa

O seu atendimento, na medida da sua agenda.

); };