import { useEffect, useState } from 'react'; import { Image, Text, TouchableOpacity, View } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import { useTranslation } from 'react-i18next'; import { useColors } from '../../lib/theme'; import { FormSheet } from '../FormSheet'; /** * Anti-Blind-Klick-Gate fürs Onboarding: zeigt VOR der eigentlichen Permission * eine kurze Instruktion (welcher Button im gleich folgenden System-Dialog) und * verlangt ein bewusstes Häkchen, bevor der „Weiter"-Button aktiv wird. Bricht * das „weiter-weiter"-Muster genau dort, wo User sonst den falschen Button tippen * (v.a. iOS-Family-Controls: zwei Buttons, der blaue ist die Falle). * * Onboarding-only — der Blocker-Screen aktiviert weiterhin direkt (kein Gate). */ export function PermissionConfirmSheet({ visible, title, body, steps, screenshot, indicatorCaption, onConfirm, onClose, }: { visible: boolean; title: string; body: string; /** Optional: nummerierte Schritte (z.B. a11y: erst Overlay erlauben, dann Schalter an). */ steps?: string[]; /** Optional: Screenshot (require-Handle) — zeigt dem User wie der Ziel-Screen aussieht. */ screenshot?: number; /** Optional: Caption unter dem Screenshot — der Indikator „hier tippen". */ indicatorCaption?: string; onConfirm: () => void; onClose: () => void; }) { const { t } = useTranslation(); const colors = useColors(); const [checked, setChecked] = useState(false); // Häkchen bei jedem Öffnen zurücksetzen — sonst klickt man beim nächsten Step // mit schon-gesetztem Haken blind durch (genau das wollen wir verhindern). useEffect(() => { if (visible) setChecked(false); }, [visible]); return ( {/* FormSheet padded nur den Titel, nicht die children → hier selbst polstern. */} {body} {steps && steps.length > 0 && ( {steps.map((step, i) => ( {i + 1} {step} ))} )} {screenshot != null && ( {!!indicatorCaption && ( {indicatorCaption} )} )} setChecked((c) => !c)} style={{ flexDirection: 'row', alignItems: 'center', gap: 12, marginTop: 20, paddingVertical: 4, }} > {t('onboarding.protection_confirm.checkbox')} {t('onboarding.protection_confirm.cta')} ); }