/** * BehördenKlar — Behördenbriefe verstehen, übersetzen, beantworten. * Einstiegspunkt: Navigation + Initialisierung (Archiv, Benachrichtigungen). * * Aufbau: untere Tab-Leiste (Fristen · Scannen · Archiv) mit darüber * liegenden Detail-Screens (Analyse, Antwort, Einstellungen …). */ import React, { useEffect } from 'react'; import { Pressable, StyleSheet, View } from 'react-native'; import { StatusBar } from 'expo-status-bar'; import { NavigationContainer, useNavigation } from '@react-navigation/native'; import { createNativeStackNavigator, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { HauptTabParamList, RootStackParamList } from './src/types'; import { useAppStore } from './src/store/useAppStore'; import { initialisiereBenachrichtigungen } from './src/services/erinnerungen'; import { holeConsent } from './src/services/storage'; import { AppSchutz } from './src/components/AppSchutz'; import { Ikone } from './src/components/Ikone'; import { farben, schrift } from './src/theme'; import { FristenScreen } from './src/screens/FristenScreen'; import { ArchivScreen } from './src/screens/ArchivScreen'; import { ConsentScreen } from './src/screens/ConsentScreen'; import { ScanScreen } from './src/screens/ScanScreen'; import { AnalyseScreen } from './src/screens/AnalyseScreen'; import { AntwortScreen } from './src/screens/AntwortScreen'; import { GlossarScreen } from './src/screens/GlossarScreen'; import { EinstellungenScreen } from './src/screens/EinstellungenScreen'; const Stack = createNativeStackNavigator(); const Tab = createBottomTabNavigator(); /** Platzhalter für den mittleren Scan-Tab — seine Taste öffnet den Scan-Flow, * der Inhalt wird nie angezeigt (der Tab-Wechsel wird abgefangen). */ const LeererScreen = () => null; /** Erhabener runder Scan-Knopf in der Mitte der Tab-Leiste. */ function ScanKnopf({ onPress }: { onPress: () => void }) { return ( [styles.scanKnopf, pressed && { opacity: 0.85 }]} > ); } function HauptTabs() { const navigation = useNavigation>(); const insets = useSafeAreaInsets(); const scanStarten = async () => { const ok = await holeConsent(); navigation.navigate(ok ? 'Scan' : 'Consent'); }; return ( , }} /> }} listeners={{ tabPress: (e) => e.preventDefault() }} /> , }} /> ); } export default function App() { const initialisiere = useAppStore((s) => s.initialisiere); useEffect(() => { initialisiereBenachrichtigungen(); initialisiere(); }, [initialisiere]); return ( ); } const styles = StyleSheet.create({ scanWrap: { flex: 1, alignItems: 'center', justifyContent: 'flex-start' }, scanKnopf: { width: 56, height: 56, borderRadius: 28, marginTop: -18, backgroundColor: farben.primaer, alignItems: 'center', justifyContent: 'center', borderWidth: 3, borderColor: farben.flaeche, shadowColor: '#000', shadowOffset: { width: 0, height: 3 }, shadowOpacity: 0.2, shadowRadius: 5, elevation: 5, }, });