import { useEffect } from 'react'; import { AppState } from 'react-native'; import { useAppLockStore } from '../stores/appLock'; import { useAuthStore } from '../stores/auth'; import { LockScreen } from './LockScreen'; /** * Hängt die App-Sperre vor den App-Inhalt: * - sperrt sofort wenn die App in den Hintergrund geht (`background`-State — * NICHT `inactive`, sonst würde der App-Switcher-Peek schon sperren) * - rendert den LockScreen solange `enabled && locked && session` gilt * * `init()` der appLock-Store wird im RootLayout zusammen mit den anderen Stores * aufgerufen; der Splash wartet auf `ready`, daher gibt es hier kein Flash-of- * unlocked-content beim Kaltstart (init setzt `locked = enabled`). */ export function AppLockGate({ children }: { children: React.ReactNode }) { const enabled = useAppLockStore((s) => s.enabled); const locked = useAppLockStore((s) => s.locked); const lock = useAppLockStore((s) => s.lock); const session = useAuthStore((s) => s.session); useEffect(() => { if (!enabled) return; const sub = AppState.addEventListener('change', (state) => { if (state === 'background') lock(); }); return () => sub.remove(); }, [enabled, lock]); if (enabled && locked && session) { return ; } return <>{children}; }