import { useFocusEffect } from '@react-navigation/native'; import { useRouter } from 'expo-router'; import { useAuth } from '@/src/contexts/AuthContext'; import { StorageServiceCasual } from 'common-ui'; import constants from '@/src/constants'; interface AuthenticatedRouteOptions { targetUrl?: string; queryParams?: Record; } interface RedirectState { targetUrl: string; queryParams: Record; timestamp: number; } export function useAuthenticatedRoute(options: AuthenticatedRouteOptions = {}) { const { isAuthenticated, isLoading } = useAuth(); const router = useRouter(); console.log({ops: options.queryParams}) useFocusEffect(() => { // Don't redirect while auth is loading if (isLoading) return; // If user is authenticated, no need to do anything if (isAuthenticated) return; // User is not authenticated, store redirect state and navigate to login const redirectState: RedirectState = { targetUrl: options.targetUrl || '/', queryParams: options.queryParams || {}, timestamp: Date.now(), }; // Store the redirect state StorageServiceCasual.setItem(constants.AUTH_REDIRECT_KEY, JSON.stringify(redirectState)) .then(() => { // Navigate to login page (push to keep original route in stack) router.push('/(auth)/login'); }) .catch((error) => { console.error('Failed to store redirect state:', error); // Still navigate to login even if storage fails router.push('/(auth)/login'); }); }); return { isAuthenticated, isLoading, }; }