'use client' import { useState } from 'react' import { createBrowserClient } from '@supabase/ssr' import { useRouter } from 'next/navigation' type Mode = 'login' | 'reset' | 'reset-sent' export default function LoginPage() { const [mode, setMode] = useState('login') const [isPending, setIsPending] = useState(false) const [error, setError] = useState(null) const [showPassword, setShowPassword] = useState(false) const [resetEmail, setResetEmail] = useState('') const router = useRouter() const supabase = createBrowserClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! ) async function handleSubmit(e: React.FormEvent) { e.preventDefault() setIsPending(true) setError(null) const fd = new FormData(e.currentTarget) const { error: authError } = await supabase.auth.signInWithPassword({ email: fd.get('email') as string, password: fd.get('password') as string, }) if (authError) { setError('Email o contraseña incorrectos') setIsPending(false) return } router.push('/admin/responses') router.refresh() } // Reusa /auth/confirm: ya escucha PASSWORD_RECOVERY (lo armamos para el // flujo de invitación, pero Supabase emite el mismo evento acá). async function handleReset(e: React.FormEvent) { e.preventDefault() setIsPending(true) setError(null) const fd = new FormData(e.currentTarget) const email = String(fd.get('email') ?? '') const { error: resetError } = await supabase.auth.resetPasswordForEmail(email, { redirectTo: `${process.env.NEXT_PUBLIC_SITE_URL}/auth/confirm`, }) setIsPending(false) if (resetError) { setError('No pudimos enviar el link. Probá de nuevo.') return } setResetEmail(email) setMode('reset-sent') } if (mode === 'reset-sent') { return (

Revisá tu email

Si {resetEmail} tiene una cuenta, te enviamos un link para crear una contraseña nueva.

) } if (mode === 'reset') { return (

Recuperar contraseña

{error && (

{error}

)}
) } return (

Acceso interno

{error && (

{error}

)}
) }