diff options
| author | Saumit <justsaumit@protonmail.com> | 2025-09-27 02:14:26 +0530 |
|---|---|---|
| committer | Saumit <justsaumit@protonmail.com> | 2025-09-27 02:14:26 +0530 |
| commit | 82e03978b89938219958032efb1448cc76baa181 (patch) | |
| tree | 626f3e54d52ecd49be0ed3bee30abacc0453d081 /src/react-native-app/app/_layout.tsx | |
Initial snapshot - OpenTelemetry demo 2.1.3 -f
Diffstat (limited to 'src/react-native-app/app/_layout.tsx')
| -rw-r--r-- | src/react-native-app/app/_layout.tsx | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/react-native-app/app/_layout.tsx b/src/react-native-app/app/_layout.tsx new file mode 100644 index 0000000..d8ac89c --- /dev/null +++ b/src/react-native-app/app/_layout.tsx @@ -0,0 +1,59 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +import { SplashScreen, Stack } from "expo-router"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { + DarkTheme, + DefaultTheme, + ThemeProvider, +} from "@react-navigation/native"; +import { useColorScheme } from "react-native"; +import { RootSiblingParent } from "react-native-root-siblings"; +import Toast from "react-native-toast-message"; +import { useFonts } from "expo-font"; +import { useEffect, useMemo } from "react"; +import { useTracer } from "@/hooks/useTracer"; +import CartProvider from "@/providers/Cart.provider"; + +const queryClient = new QueryClient(); + +export default function RootLayout() { + const colorScheme = useColorScheme(); + const [fontsLoaded] = useFonts({ + SpaceMono: require("../assets/fonts/SpaceMono-Regular.ttf"), + }); + const { loaded: tracerLoaded } = useTracer(); + + const loaded = useMemo<boolean>( + () => fontsLoaded && tracerLoaded, + [fontsLoaded, tracerLoaded], + ); + useEffect(() => { + if (loaded) { + SplashScreen.hideAsync(); + } + }, [loaded]); + + if (!loaded) { + return null; + } + + return ( + <ThemeProvider value={colorScheme === "dark" ? DarkTheme : DefaultTheme}> + <RootSiblingParent> + <QueryClientProvider client={queryClient}> + <CartProvider> + {/* + TODO Once https://github.com/open-telemetry/opentelemetry-js-contrib/pull/2359 is available it can + be used here to provide telemetry for navigation between tabs + */} + <Stack> + <Stack.Screen name="(tabs)" options={{ headerShown: false }} /> + </Stack> + </CartProvider> + </QueryClientProvider> + </RootSiblingParent> + <Toast /> + </ThemeProvider> + ); +} |
