import React, { useRef, useEffect } from 'react'; import { NavigationContainer, DefaultTheme, DarkTheme, NavigationContainerRef, } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { useColorScheme } from 'react-native'; import { RootStackParamList } from '@navigation/navigationTypes'; import AuthStack from './authStack'; import AppStack from './appStack'; import onBoardingStack from './onBoardingStack'; import { useAppSelector } from '@store'; import { socketService } from '@services'; const Stack = createNativeStackNavigator(); const RootNavigator: React.FC = () => { const scheme = useColorScheme(); const theme = scheme === 'dark' ? DarkTheme : DefaultTheme; const accessToken = useAppSelector(state => state.auth.accessToken); const isOnboarding = useAppSelector( state => state.auth.user?.status === 'ONBOARDING', ); const navigationRef = useRef>(null); // Inject the navigation ref into the socket service so it can navigate // to NewJobRequest from anywhere when a delivery_offer event arrives. useEffect(() => { if (navigationRef.current) { socketService.bootstrap( // store is already injected in App.tsx — pass null so it's not overwritten null as any, navigationRef.current, ); } }, []); return ( {!accessToken ? ( ) : isOnboarding ? ( ) : ( )} ); }; export default RootNavigator;