import React, { useEffect } from 'react'; import { StatusBar } from 'expo-status-bar'; import { ActivityIndicator, View } from 'react-native'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { PersistQueryClientProvider } from '@tanstack/react-query-persist-client'; import { AuthProvider, useAuth } from './contexts/AuthContext'; import { DeviceProvider, useDevice } from './contexts/DeviceContext'; import { LoginScreen } from './app/login'; import { RegisterScreen } from './app/register'; import { HomeScreen } from './app/index'; import { UploadScreen } from './app/upload'; import { ScanScreen } from './app/scan'; import { SearchScreen } from './app/search'; import { BatchReviewScreen } from './app/batch-review'; import { PendingReviewScreen } from './app/pending-review'; import { FileDetailScreen } from './app/file-detail'; import { FileEditScreen } from './app/file-edit'; import { FolderScreen } from './app/folder'; import { OnboardingScreen } from './app/onboarding'; import { SyncDetailScreen } from './app/sync-detail'; import { onboardingStorage } from './services/onboardingStorage'; import { initDB } from './services/fileStore'; import { migrateFromLegacy } from './services/fileStore/migrate'; import { createMMKVPersister } from './services/mmkvPersister'; initDB(); migrateFromLegacy(); const Stack = createNativeStackNavigator(); const queryClient = new QueryClient({ defaultOptions: { queries: { gcTime: 1000 * 60 * 60 * 24, // 24h }, }, }); const persister = createMMKVPersister(); function AppNavigator() { const { user, isLoading: authLoading } = useAuth(); const { isLoading: deviceLoading } = useDevice(); if (authLoading || (user && deviceLoading)) { return ( ); } const needsOnboarding = user && onboardingStorage.needsOnboarding(); return ( {user ? ( <> ) : ( <> )} ); } function AppContent() { return ( ); } export default function App() { return ( ); }