diff --git a/src/api/common/firebase.ts b/src/api/common/firebase.ts index 197ea058..46963120 100644 --- a/src/api/common/firebase.ts +++ b/src/api/common/firebase.ts @@ -1,5 +1,10 @@ import { Env } from '@env'; import { initializeApp } from 'firebase/app'; +import { + connectAuthEmulator, + getReactNativePersistence, + initializeAuth, +} from 'firebase/auth'; import { connectFirestoreEmulator, initializeFirestore, @@ -7,6 +12,7 @@ import { import { connectFunctionsEmulator, getFunctions } from 'firebase/functions'; import { Platform } from 'react-native'; +import { reactNativeAsyncStorage } from '../../core/storage'; const firebaseConfig = { apiKey: Env.EXPO_PUBLIC_FIREBASE_API_KEY, authDomain: Env.EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN, @@ -21,12 +27,20 @@ export const app = initializeApp(firebaseConfig); export const db = initializeFirestore(app, { experimentalForceLongPolling: true, }); -const functions = getFunctions(app); +export const functions = getFunctions(app); +export const auth = initializeAuth(app, { + persistence: getReactNativePersistence(reactNativeAsyncStorage), +}); // Connect to emulator // 10.0.2.2 is a special IP address to connect to the 'localhost' of the host computer from an Android emulator const emulatorHost = Platform.OS === 'ios' ? '127.0.0.1' : '10.0.2.2'; +const FIRESTORE_PORT = 8080; +const FUNCTIONS_PORT = 5001; +const AUTH_PORT = 9099; + if (__DEV__) { - connectFirestoreEmulator(db, emulatorHost, 8080); - connectFunctionsEmulator(functions, emulatorHost, 5001); + connectFirestoreEmulator(db, emulatorHost, FIRESTORE_PORT); + connectFunctionsEmulator(functions, emulatorHost, FUNCTIONS_PORT); + connectAuthEmulator(auth, `http://${emulatorHost}:${AUTH_PORT}`); } diff --git a/src/app/(tabs)/settings.tsx b/src/app/(tabs)/settings.tsx index c2a4fd80..5a8a61c2 100644 --- a/src/app/(tabs)/settings.tsx +++ b/src/app/(tabs)/settings.tsx @@ -1,17 +1,27 @@ /* eslint-disable react/react-in-jsx-scope */ import { Env } from '@env'; +import { useState } from 'react'; import { Linking } from 'react-native'; import { Item } from '@/components/settings/item'; import { ItemsContainer } from '@/components/settings/items-container'; import { ThemeItem } from '@/components/settings/theme-item'; import { useAuth } from '@/core'; -import { Header, ScreenContainer, ScrollView, View } from '@/ui'; +import { Button, Header, ScreenContainer, ScrollView, View } from '@/ui'; export default function Settings() { const signOut = useAuth.use.signOut(); - // const { colorScheme } = useColorScheme(); - // const iconColor = colorScheme === 'dark' ? colors.neutral[400] : colors.neutral[500]; + const [isLoading, setIsLoading] = useState(false); + const handleLogout = async () => { + setIsLoading(true); + try { + await signOut(); + } catch (error) { + console.error('Logout error:', error); + } finally { + setIsLoading(false); + } + }; return (
@@ -83,9 +93,12 @@ export default function Settings() { - - - +