File size: 1,766 Bytes
964d38b
e179c31
7cf51ae
e0405f2
 
20a9726
 
 
e0405f2
 
 
964d38b
20a9726
 
 
e0405f2
 
 
 
20a9726
 
 
e0405f2
 
 
 
 
 
 
 
20a9726
 
3fdd49b
20a9726
 
 
 
 
 
 
 
 
964d38b
7cf51ae
 
 
 
 
964d38b
20a9726
 
 
 
e179c31
 
 
 
 
20a9726
964d38b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { Stack } from 'expo-router';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import * as BackgroundFetch from 'expo-background-fetch';
import { useEffect } from 'react';
import { View, ActivityIndicator } from 'react-native';
import LoginScreen from '../components/LoginScreen';
import { AuthProvider, useAuth } from '../components/AuthContext';

// Import syncManager to ensure TaskManager.defineTask is called in the global scope
import { BACKGROUND_SYNC_TASK } from './utils/syncManager';

function AppContent() {
  const { isAuthenticated, login } = useAuth();

  useEffect(() => {
    const registerTask = async () => {
      try {
        await BackgroundFetch.registerTaskAsync(BACKGROUND_SYNC_TASK, {
          minimumInterval: 60 * 15,
          stopOnTerminate: false,
          startOnBoot: true,
        });
      } catch (err) {
        console.warn('Background fetch failed to register:', err);
      }
    };
    registerTask();
  }, []);

  if (isAuthenticated === null) {
    return (
      <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#F6EAE1' }}>
        <ActivityIndicator size="large" color="#1a73e8" />
      </View>
    );
  }

  if (!isAuthenticated) {
    return <LoginScreen onLoginSuccess={(token: string) => login(token)} />;
  }

  return (
    <SafeAreaProvider>
      <Stack>
        <Stack.Screen name="(tabs)" options={{ headerShown: false }} />
      </Stack>
    </SafeAreaProvider>
  );
}

export default function Layout() {
  return (
    <GestureHandlerRootView style={{ flex: 1 }}>
      <AuthProvider>
        <AppContent />
      </AuthProvider>
    </GestureHandlerRootView>
  );
}