-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path_layout.tsx
More file actions
98 lines (85 loc) · 2.99 KB
/
Copy path_layout.tsx
File metadata and controls
98 lines (85 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import 'react-native-get-random-values';
import { ClerkLoaded, ClerkProvider, useAuth } from '@clerk/expo';
import { tokenCache } from '@clerk/expo/token-cache';
import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native';
import * as Sentry from '@sentry/react-native';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { Stack, useNavigationContainerRef } from 'expo-router';
import React, { useEffect } from 'react';
import { LogBox, useColorScheme } from 'react-native';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { DbGate } from '@/components/db/db-gate';
import { EntitlementsProvider } from '@/features/entitlements';
const navigationIntegration = Sentry.reactNavigationIntegration({
enableTimeToInitialDisplay: true,
});
Sentry.init({
dsn: 'https://9337f3f61153cc5141da74000c8d45f6@o106619.ingest.us.sentry.io/4511343173238784',
sendDefaultPii: true,
tracesSampleRate: 1.0,
replaysSessionSampleRate: 0,
replaysOnErrorSampleRate: 1,
integrations: [
Sentry.mobileReplayIntegration()
],
});
const queryClient = new QueryClient();
LogBox.ignoreAllLogs();
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY ?? '';
if (!publishableKey) {
throw new Error(
'Missing EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY. Add it to your .env file before running the app.'
);
}
const RootLayout = () => {
const colorScheme = useColorScheme();
const navigationRef = useNavigationContainerRef();
useEffect(() => {
if (navigationRef) {
navigationIntegration.registerNavigationContainer(navigationRef);
}
}, [navigationRef]);
return (
<ClerkProvider publishableKey={publishableKey} tokenCache={tokenCache}>
<GestureHandlerRootView style={{ flex: 1 }}>
<SafeAreaProvider>
<QueryClientProvider client={queryClient}>
<ThemeProvider value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
<ClerkLoaded>
<EntitlementsProvider>
<DbGate>
<RootNavigator />
</DbGate>
</EntitlementsProvider>
</ClerkLoaded>
</ThemeProvider>
</QueryClientProvider>
</SafeAreaProvider>
</GestureHandlerRootView>
</ClerkProvider>
);
};
function RootNavigator() {
const { isSignedIn } = useAuth();
return (
<Stack screenOptions={{ headerShown: false }}>
<Stack.Protected guard={!!isSignedIn}>
<Stack.Screen name="(tabs)" />
<Stack.Screen
name="record"
options={{
presentation: 'modal',
animation: 'slide_from_bottom',
headerShown: true,
headerShadowVisible: false,
}}
/>
</Stack.Protected>
<Stack.Protected guard={!isSignedIn}>
<Stack.Screen name="(auth)" />
</Stack.Protected>
</Stack>
);
}
export default Sentry.wrap(RootLayout);