import React, { useEffect, useState } from 'react'; import { IonButton, IonContent, IonHeader, IonIcon, IonItem, IonLabel, IonPage, IonTitle, IonToolbar, IonText, } from '@ionic/react'; import { waterOutline, fitnessOutline, shieldCheckmarkOutline, } from 'ionicons/icons'; import { FirebaseAuthentication } from '@capacitor-firebase/authentication'; import { Capacitor } from '@capacitor/core'; import { Redirect as RedirectRR, useHistory } from 'react-router-dom'; import { supabase } from '../supabase'; import { Style, setStatusBarBackground, setStatusBarStyle, } from '../utils/statusBar'; import { useIonViewWillEnter } from '@ionic/react'; import runnerDrinkingWaterImage from '../assets/runner-drinking-water-photorealistic.png'; const RedirectAny = RedirectRR as any; const Account: React.FC = () => { const history = useHistory(); const [sessionChecked, setSessionChecked] = useState(false); const [email, setEmail] = useState(null); const [signingOut, setSigningOut] = useState(false); const [signOutError, setSignOutError] = useState(''); useEffect(() => { let mounted = true; supabase.auth.getSession().then(({ data }) => { if (!mounted) return; setEmail(data.session?.user.email ?? null); setSessionChecked(true); }); const { data: { subscription }, } = supabase.auth.onAuthStateChange((_event, session) => { if (!mounted) return; setEmail(session?.user.email ?? null); setSessionChecked(true); if (!session) { history.replace('/auth'); } }); return () => { mounted = false; subscription.unsubscribe(); }; }, [history]); const handleSignOut = async () => { setSignOutError(''); setSigningOut(true); try { const { error } = await supabase.auth.signOut(); if (error) { setSignOutError(error.message); return; } if (Capacitor.isNativePlatform()) { try { await FirebaseAuthentication.signOut(); } catch { // Ignore if no native Google session exists. } } setEmail(null); history.replace('/auth'); } catch (error) { setSignOutError( error instanceof Error ? error.message : 'Unable to sign out right now.', ); } finally { setSigningOut(false); } }; if (sessionChecked && !email) { return ; } return ( Account
Runner drinking water after a run
Recovery & account

{email ?? 'Loading...'}

Stay hydrated, stay consistent, and keep your habit history safely synced across sessions.

Recovery mindset
Built for routines

Email

{email ?? '—'}

Your data is synced

Sign in to keep your streaks and progress available whenever you come back.

Back to Habits {signOutError ? (

{signOutError}

) : null}
{signingOut ? 'Signing Out…' : 'Sign Out'}
); }; export default Account;