import React, { useEffect, useRef } from 'react'; import { Stack } from 'expo-router'; import { StatusBar } from 'expo-status-bar'; import { Image, StyleSheet, View } from 'react-native'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import { useAuthStore } from '../store/authStore'; import { registerForPushNotifications, addNotificationListener, addNotificationResponseListener } from '../services/notifications'; import { ThemeProvider, useThemeContext } from '../components/ThemeProvider'; import { initFaro } from '../services/faro'; // Boot Faro RUM once, as early as possible. initFaro(); const queryClient = new QueryClient(); const bgLight = require('../assets/bg.png'); const bgDark = require('../assets/bg_dark.png'); function RootLayoutInner() { const { checkAuth } = useAuthStore(); const { colors, isDark } = useThemeContext(); const notificationListener = useRef>(); const responseListener = useRef>(); useEffect(() => { checkAuth(); registerForPushNotifications(); notificationListener.current = addNotificationListener((notification) => { console.log('Notification received:', notification); }); responseListener.current = addNotificationResponseListener((response) => { console.log('Notification clicked:', response); }); return () => { notificationListener.current?.remove(); responseListener.current?.remove(); }; }, []); return ( <> ); } function ThemedBackground({ children }: { children: React.ReactNode }) { const { isDark } = useThemeContext(); return ( {children} ); } export default function RootLayout() { return ( ); } const styles = StyleSheet.create({ root: { flex: 1, }, bgImage: { position: 'absolute', left: 0, right: 0, top: 0, bottom: 0, width: '100%', height: '100%', opacity: 0.55, zIndex: 0, }, overlay: { position: 'absolute', left: 0, right: 0, top: 0, bottom: 0, backgroundColor: 'rgba(255, 252, 245, 0.48)', zIndex: 1, }, overlayDark: { backgroundColor: 'rgba(0, 0, 0, 0.25)', }, content: { flex: 1, zIndex: 2, }, });