| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import "./global.css"
- import { Stack } from 'expo-router/stack';
- import AuthProvider, { useAuth } from '../context/AuthProvider';
- import { EXPO_PUBLIC_NODE_ENV } from '@env';
- import { GestureHandlerRootView } from 'react-native-gesture-handler';
- import { useEffect, useState } from 'react';
- import { checkVersion } from '../component/checkVersion';
- import { authenticationService } from '../service/authService';
- import { usePushNotifications } from './hooks/usePushNotifications';
- import Constants from 'expo-constants';
- import { Alert, AppState } from 'react-native';
- import * as Updates from 'expo-updates';
- export default function RootLayout() {
- const [isLoading, setIsLoading] = useState(true);
- const { user } = useAuth();
- const { expoPushToken, notification } = usePushNotifications();
- const data = JSON.stringify(notification, undefined, 2);
- useEffect(() => {
- const fetchVersion = async () => {
- const response = await authenticationService.getVersion();
- checkVersion(response);
- };
- // Initial version check
- fetchVersion();
- // Set up AppState listener
- const subscription = AppState.addEventListener('change', async (nextAppState) => {
- if (nextAppState === 'active') {
- fetchVersion();
- }
- const update = await Updates.checkForUpdateAsync();
- if (update.isAvailable) {
- await Updates.fetchUpdateAsync();
- await Updates.reloadAsync(); // Reload the app to apply the update
- }
- });
- // Cleanup subscription on unmount
- return () => {
- subscription.remove();
- };
- }, []);
- return (
- <GestureHandlerRootView style={{ flex: 1 }}>
- <AuthProvider>
- <Stack>
- <Stack.Screen name="(auth)/(tabs)" options={{ headerShown: false }} />
- <Stack.Screen name="(public)/login" options={{ headerShown: false }} />
- <Stack.Screen name="(public)/registerChooseVehiclesOne" options={{ headerShown: false }} />
- <Stack.Screen name="(public)/registerChooseVehiclesTwo" options={{ headerShown: false }} />
- {/* Testing Purpose */}
- {EXPO_PUBLIC_NODE_ENV == 'development' ? (
- <Stack.Screen
- name="(public)/test"
- options={{
- headerShown: false,
- title: 'Test Component Page'
- }}
- />
- ) : (
- <></>
- )}
- </Stack>
- </AuthProvider>
- </GestureHandlerRootView>
- );
- }
|