/** * @license * SPDX-License-Identifier: Apache-2.0 */ import { useEffect, useState } from "react"; import type { Session } from "@supabase/supabase-js"; import { AnimatePresence, motion } from "motion/react"; import { LoginScreen } from "./components/LoginScreen"; import { PortalPrincipal } from "./components/PortalPrincipal"; import { ALLOWED_EMAILS, isAllowedEmail } from "./lib/auth"; import { isSupabaseConfigured, supabase } from "./lib/supabase"; export default function App() { const [session, setSession] = useState(null); const [isLoadingSession, setIsLoadingSession] = useState(true); const [authError, setAuthError] = useState(""); const validateAndSetSession = async (currentSession: Session | null) => { const email = currentSession?.user?.email; if (!currentSession) { setSession(null); return; } if (!isAllowedEmail(email)) { setSession(null); setAuthError( "Este correo no tiene acceso al portal. Usa ymadera@gomezleemarketing.com o iaracena@gomezleemarketing.com." ); await supabase?.auth.signOut(); return; } setAuthError(""); setSession(currentSession); }; useEffect(() => { if (!isSupabaseConfigured || !supabase) { setAuthError("Falta configurar Supabase en el archivo .env.local."); setIsLoadingSession(false); return; } let isMounted = true; supabase.auth.getSession().then(async ({ data, error }) => { if (!isMounted) return; if (error) { setAuthError("No se pudo validar la sesión. Intenta iniciar sesión nuevamente."); setSession(null); } else { await validateAndSetSession(data.session); } setIsLoadingSession(false); }); const { data: listener } = supabase.auth.onAuthStateChange(async (_event, currentSession) => { await validateAndSetSession(currentSession); setIsLoadingSession(false); }); return () => { isMounted = false; listener.subscription.unsubscribe(); }; }, []); const handleLogin = async () => { setAuthError(""); if (!isSupabaseConfigured || !supabase) { setAuthError("Falta configurar VITE_SUPABASE_URL y VITE_SUPABASE_ANON_KEY en .env.local."); return; } const redirectTo = `${window.location.origin}${import.meta.env.BASE_URL}`; const { error } = await supabase.auth.signInWithOAuth({ provider: "google", options: { redirectTo, }, }); if (error) { setAuthError("No se pudo iniciar sesión con Google. Revisa la configuración de Supabase Auth."); } }; const handleLogout = async () => { setAuthError(""); await supabase?.auth.signOut(); setSession(null); }; if (isLoadingSession) { return (
Validando sesión...
); } const isLoggedIn = Boolean(session && isAllowedEmail(session.user.email)); return (
{!isLoggedIn ? ( ) : ( )}
); }