import type { Session } from '@supabase/supabase-js' import { useEffect, useState } from 'react' import CompleteProfileScreen from './components/auth/CompleteProfileScreen' import LoginScreen from './components/auth/LoginScreen' import AppShell from './components/layout/AppShell' import { supabase } from './data/supabaseClient' export default function App() { // undefined = still checking for an existing session; null = signed out. const [session, setSession] = useState(undefined) // undefined = haven't checked yet; null = has one; true = needs to set one. const [needsUsername, setNeedsUsername] = useState(undefined) useEffect(() => { supabase.auth.getSession().then(({ data }) => setSession(data.session)) const { data: { subscription }, } = supabase.auth.onAuthStateChange((_event, session) => setSession(session)) return () => subscription.unsubscribe() }, []) useEffect(() => { // Nothing to check while signed out — the render logic below never // reads needsUsername in that case anyway. if (!session) return supabase .from('profiles') .select('username') .eq('id', session.user.id) .single() .then(({ data }) => setNeedsUsername(!data?.username)) }, [session]) if (session === undefined) { return
Loading…
} if (!session) { return } if (needsUsername === undefined) { return
Loading…
} if (needsUsername) { return setNeedsUsername(false)} /> } return }