import { useState, useEffect } from 'react'; import { toast } from 'react-toastify'; import { getSupabase } from '~/lib/supabase/client'; import type { Session, User, AuthChangeEvent } from '@supabase/supabase-js'; import { SignInForm } from './SignInForm'; import { SignUpForm } from './SignUpForm'; export function ClientAuth() { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const [showAuthModal, setShowAuthModal] = useState(false); const [isSignUp, setIsSignUp] = useState(false); const [showDropdown, setShowDropdown] = useState(false); const [usageData, setUsageData] = useState<{ peanuts_used: number; peanuts_refunded: number } | null>(null); 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); if (session?.user) { setShowAuthModal(false); } }); return () => { subscription.unsubscribe(); }; }, []); useEffect(() => { async function updateUsageData() { try { const { data, error } = await getSupabase() .from('profiles') .select('peanuts_used, peanuts_refunded') .eq('id', user?.id) .single(); if (error) { throw error; } setUsageData(data); } catch (error) { console.error('Error fetching usage data:', error); } } if (showDropdown) { updateUsageData(); } }, [showDropdown]); const handleSignOut = async () => { await getSupabase().auth.signOut(); setShowDropdown(false); toast.success('Signed out successfully'); }; if (loading) { return
; } // Avatar URLs are disabled due to broken links from CORS issues. const useAvatarURL = false; return ( <> {user ? (
{showDropdown && (
Signed in as
{user.email}
Usage
Peanuts used {usageData?.peanuts_used ?? '...'}
Peanuts refunded {usageData?.peanuts_refunded ?? '...'}
)}
) : ( )} {showAuthModal && (
setShowAuthModal(false)} >
e.stopPropagation()} > {isSignUp ? ( setIsSignUp(false)} /> ) : ( setIsSignUp(true)} /> )}
)} ); }