import { useState } from 'react'; import { Pressable, Switch, Text, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import Constants from 'expo-constants'; import { apiClient } from '@/api/client'; import { useAuthStore } from '@/stores/auth-store'; import { logError, toUserMessage } from '@/lib/errors'; import { toast } from 'sonner-native'; import type { RootStackScreenProps } from '@/navigation/types'; export function SettingsScreen({ navigation, }: RootStackScreenProps<'Settings'>) { const user = useAuthStore((s) => s.user); const signOut = useAuthStore((s) => s.signOut); const isSigningOut = useAuthStore((s) => s.isSigningOut); const [emailNotifications, setEmailNotifications] = useState( user?.email_notifications_enabled ?? true, ); const version = Constants.expoConfig?.version ?? '—'; // Optimistic toggle — flip the local + auth-store state immediately, roll // back on failure. Mirrors desktop's settings-page handler. const handleToggleEmailNotifications = async (checked: boolean) => { setEmailNotifications(checked); useAuthStore.setState((state) => ({ user: state.user ? { ...state.user, email_notifications_enabled: checked } : null, })); try { await apiClient.updateSettings({ email_notifications_enabled: checked }); } catch (err) { setEmailNotifications(!checked); useAuthStore.setState((state) => ({ user: state.user ? { ...state.user, email_notifications_enabled: !checked } : null, })); toast.error(toUserMessage(err)); logError(err, { scope: 'settings.emailNotifications' }); } }; return ( navigation.goBack()} className="px-2 py-1"> Settings Email notifications Version {version} void signOut()} disabled={isSigningOut} className="px-4 py-3 active:bg-accent rounded-xl" > {isSigningOut ? 'Signing out…' : 'Sign out'} ); } function SettingsGroup({ title, children, }: { title: string; children: React.ReactNode; }) { return ( {title} {children} ); }