forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 馃幍
1import { NavigationContainer } from "@react-navigation/native";
2import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
3import Constants from "expo-constants";
4import { useFonts } from "expo-font";
5import { StatusBar } from "expo-status-bar";
6import { useSetAtom } from "jotai";
7import { SafeAreaProvider } from "react-native-safe-area-context";
8import { didAtom } from "./atoms/did";
9import { handleAtom } from "./atoms/handle";
10import { RootStack } from "./Navigation";
11import { NowPlayingProvider } from "./providers/NowPlayingProvider";
12
13const queryClient = new QueryClient();
14
15const App = () => {
16 const setDid = useSetAtom(didAtom);
17 const setHandle = useSetAtom(handleAtom);
18 useFonts({
19 RockfordSansRegular: require("../assets/fonts/RockfordSans-Regular.otf"),
20 RockfordSansMedium: require("../assets/fonts/RockfordSans-Medium.otf"),
21 RockfordSansBold: require("../assets/fonts/RockfordSans-Bold.otf"),
22 });
23
24 const getActiveRouteName = (state: any) => {
25 if (!state || !state.routes) return null;
26
27 const route = state.routes[state.index];
28
29 // Dive into nested navigators
30 if (route.state) {
31 return getActiveRouteName(route.state);
32 }
33
34 return route.name;
35 };
36
37 return (
38 <QueryClientProvider client={queryClient}>
39 <SafeAreaProvider>
40 <NowPlayingProvider>
41 <StatusBar style="auto" />
42 <NavigationContainer
43 onStateChange={(state) => {
44 const currentTab = getActiveRouteName(state);
45 if (currentTab === "Profile" || currentTab === "Library") {
46 setDid("did:plc:7vdlgi2bflelz7mmuxoqjfcr");
47 setHandle(undefined);
48 }
49 }}
50 >
51 <RootStack />
52 </NavigationContainer>
53 </NowPlayingProvider>
54 </SafeAreaProvider>
55 </QueryClientProvider>
56 );
57};
58
59let AppEntryPoint = App;
60
61if (Constants.expoConfig?.extra?.storybookEnabled === "true") {
62 const Storybook = require("../.storybook").default;
63 const StorybookApp = () => {
64 useFonts({
65 RockfordSansRegular: require("../assets/fonts/RockfordSans-Regular.otf"),
66 RockfordSansMedium: require("../assets/fonts/RockfordSans-Medium.otf"),
67 RockfordSansBold: require("../assets/fonts/RockfordSans-Bold.otf"),
68 });
69 return <Storybook />;
70 };
71 AppEntryPoint = StorybookApp;
72}
73
74export default AppEntryPoint;