35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { crypto } from '@chat-app/shared';
|
|
import { Stack } from 'expo-router';
|
|
import { StatusBar } from 'expo-status-bar';
|
|
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
|
|
import { ErrorBoundary } from '../components/ErrorBoundary';
|
|
import { AuthProvider } from '../lib/authContext';
|
|
import { createLibsodiumBackend } from '../lib/cryptoBackend';
|
|
|
|
// Register the crypto backend exactly once, before any code that calls
|
|
// crypto.getCryptoBackend(). Doing it at module load (not inside the
|
|
// component) avoids a race where a child component renders before the
|
|
// effect fires.
|
|
crypto.setCryptoBackend(createLibsodiumBackend());
|
|
|
|
export default function RootLayout() {
|
|
return (
|
|
<GestureHandlerRootView style={{ flex: 1 }}>
|
|
<SafeAreaProvider>
|
|
<ErrorBoundary>
|
|
<AuthProvider>
|
|
<StatusBar style="auto" />
|
|
<Stack screenOptions={{ headerShown: false }}>
|
|
<Stack.Screen name="index" />
|
|
<Stack.Screen name="(app)" />
|
|
<Stack.Screen name="auth/callback" />
|
|
</Stack>
|
|
</AuthProvider>
|
|
</ErrorBoundary>
|
|
</SafeAreaProvider>
|
|
</GestureHandlerRootView>
|
|
);
|
|
}
|