managarten/apps/context/apps/mobile/app/_layout.tsx
Till-JS bb0e0cf5cb 🚚 feat(context): integrate context app into monorepo
Restructure the context app (formerly basetext) to follow the monorepo
pattern with proper workspace configuration.

Changes:
- Move app files to apps/context/apps/mobile/
- Rename package to @context/mobile
- Update bundle ID to com.manacore.context
- Create pnpm-workspace.yaml for project workspace
- Add dev scripts to root package.json
- Update CLAUDE.md with project documentation

The app structure is prepared for future web/backend additions.

Note: Existing TypeScript errors in the original codebase are preserved.
These should be fixed in a follow-up PR.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 15:09:04 +01:00

74 lines
2.2 KiB
TypeScript

import '../global.css';
import { useEffect } from 'react';
import { Slot, Stack, useRouter, useSegments } from 'expo-router';
import { useFonts } from 'expo-font';
import { SplashScreen } from 'expo-router';
import { AuthProvider, useAuth } from '../context/AuthContext';
import { ThemeProvider } from '../components/theme';
import { DebugProvider } from '../context/DebugContext';
import { I18nProvider } from '../context/I18nContext';
import { initializeRevenueCat } from '../services/revenueCatService';
import '../utils/i18n'; // Initialize i18n
// Prevent the splash screen from auto-hiding before asset loading is complete
SplashScreen.preventAutoHideAsync();
// Komponente zur Überprüfung der Authentifizierung und Weiterleitung
function RootLayoutNav() {
const { user, loading } = useAuth();
const segments = useSegments();
const router = useRouter();
const [fontsLoaded, fontError] = useFonts({
// You can add custom fonts here if needed
});
useEffect(() => {
if (fontsLoaded || fontError) {
// Hide the splash screen after the fonts have loaded (or an error was reported)
SplashScreen.hideAsync();
}
}, [fontsLoaded, fontError]);
// Prevent rendering until the fonts have loaded or an error was encountered
if (!fontsLoaded && !fontError) {
return null;
}
// Authentifizierungslogik
useEffect(() => {
if (loading) return;
const isAuthRoute = segments[0] === 'login' || segments[0] === 'register';
if (!user && !isAuthRoute) {
// Wenn der Benutzer nicht angemeldet ist und nicht auf einer Auth-Seite ist, leite zur Login-Seite weiter
router.replace('/login');
} else if (user && isAuthRoute) {
// Wenn der Benutzer angemeldet ist und auf einer Auth-Seite ist, leite zur Startseite weiter
router.replace('/');
}
// Initialisiere RevenueCat, wenn der Benutzer angemeldet ist
if (user) {
initializeRevenueCat(user.id);
}
}, [user, loading, segments, router]);
return <Slot />;
}
// Root-Layout mit AuthProvider, ThemeProvider, I18nProvider und DebugProvider
export default function RootLayout() {
return (
<I18nProvider>
<AuthProvider>
<ThemeProvider>
<DebugProvider>
<RootLayoutNav />
</DebugProvider>
</ThemeProvider>
</AuthProvider>
</I18nProvider>
);
}