fitaiProto/apps/mobile/src/app/_layout.tsx
echo 3a58d420d6 clerkauth
implemented, sync with db to be added
2025-11-10 04:16:31 +01:00

53 lines
1.5 KiB
TypeScript

import { ClerkProvider, ClerkLoaded } from "@clerk/clerk-expo";
import { Stack } from "expo-router";
import * as SecureStore from "expo-secure-store";
import { View, Text } from "react-native";
// Token cache for Clerk
const tokenCache = {
async getToken(key: string) {
try {
return SecureStore.getItemAsync(key);
} catch (err) {
console.error("Error getting token:", err);
return null;
}
},
async saveToken(key: string, value: string) {
try {
return SecureStore.setItemAsync(key, value);
} catch (err) {
console.error("Error saving token:", err);
}
},
};
export default function RootLayout() {
const publishableKey = process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;
if (!publishableKey) {
return (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Text>Missing Clerk Publishable Key</Text>
<Text
style={{ marginTop: 8, textAlign: "center", paddingHorizontal: 20 }}
>
Please add EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY to your .env file
</Text>
</View>
);
}
return (
<ClerkProvider tokenCache={tokenCache} publishableKey={publishableKey}>
<ClerkLoaded>
<Stack>
<Stack.Screen name="(auth)" options={{ headerShown: false }} />
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
<Stack.Screen name="welcome" options={{ headerShown: false }} />
</Stack>
</ClerkLoaded>
</ClerkProvider>
);
}