import { useState, useEffect } from 'react'; import { toast } from 'react-toastify'; import { getSupabase } from '~/lib/supabase/client'; import type { AuthError, Session, User, AuthChangeEvent } from '@supabase/supabase-js'; export function ClientAuth() { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const [showSignIn, setShowSignIn] = useState(false); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [isSigningIn, setIsSigningIn] = useState(false); const [showDropdown, setShowDropdown] = useState(false); useEffect(() => { async function getUser() { try { const { data } = await getSupabase().auth.getUser(); setUser(data.user); } catch (error) { console.error('Error fetching user:', error); } finally { setLoading(false); } } getUser(); const { data: { subscription }, } = getSupabase().auth.onAuthStateChange((event: AuthChangeEvent, session: Session | null) => { setUser(session?.user ?? null); }); return () => { subscription.unsubscribe(); }; }, []); const handleSignIn = async (e: React.FormEvent) => { e.preventDefault(); setIsSigningIn(true); try { const { error } = await getSupabase().auth.signInWithPassword({ email, password }); if (error) { throw error; } setShowSignIn(false); toast.success('Successfully signed in!'); } catch (error) { const authError = error as AuthError; toast.error(authError.message || 'Failed to sign in'); } finally { setIsSigningIn(false); } }; const handleSignUp = async (e: React.FormEvent) => { e.preventDefault(); setIsSigningIn(true); try { const { error } = await getSupabase().auth.signUp({ email, password }); if (error) { throw error; } toast.success('Check your email for the confirmation link!'); setShowSignIn(false); } catch (error) { const authError = error as AuthError; toast.error(authError.message || 'Failed to sign up'); } finally { setIsSigningIn(false); } }; const handleSignOut = async () => { await getSupabase().auth.signOut(); setShowDropdown(false); toast.success('Signed out successfully'); }; if (loading) { return
; } return ( <> {user ? (
{showDropdown && (
{user.email}
)}
) : ( )} {showSignIn && (
setShowSignIn(false)} >
e.stopPropagation()} >

Sign In

setEmail(e.target.value)} className="w-full p-2 border rounded bg-bolt-elements-background-depth-2 text-bolt-elements-textPrimary border-bolt-elements-borderColor" required />
setPassword(e.target.value)} className="w-full p-2 border rounded bg-bolt-elements-background-depth-2 text-bolt-elements-textPrimary border-bolt-elements-borderColor" required />
)} ); }