mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-18 19:01:23 +02:00
Complete migration of Context mobile app from direct Supabase access to NestJS backend API with mana-core-auth authentication. New files: - context/AuthProvider.tsx: mana-core-auth integration via @manacore/shared-auth - services/backendApi.ts: Backend API client for spaces, documents, AI, tokens Rewritten services (same exports, backend implementation): - supabaseService.ts: Now thin wrapper around backendApi - aiService.ts: Uses backendApi for auth token - tokenCountingService.ts: Model prices from backend API - tokenTransactionService.ts: All token ops via backend API - revenueCatService.ts: Token balance via backend API Updated 16 consumer files (auth forms, token components, AI toolbars) Deleted: - utils/supabase.ts, context/AuthContext.tsx - services/spaceService.ts, services/spaceServiceDirect.ts Dependencies: - Added: @manacore/shared-auth, expo-secure-store - Removed: @supabase/supabase-js, @google/generative-ai, openai, @azure/openai Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
74 lines
2.2 KiB
TypeScript
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/AuthProvider';
|
|
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.userId);
|
|
}
|
|
}, [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>
|
|
);
|
|
}
|