import { useState } from 'react'; import { ActivityIndicator, Pressable, Text, TextInput, View } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import { useTranslation } from 'react-i18next'; import { useMailConnect } from '../../hooks/useMailConnect'; import { useColors } from '../../lib/theme'; import { humanizeMailError } from '../../lib/mailErrors'; import { KeyboardAwareSheet } from '../KeyboardAwareSheet'; const COLLAPSED_HEIGHT = 280; type Props = { visible: boolean; email: string; onClose: () => void; onSuccess: () => void; }; /** * Sheet zum Aktualisieren des App-Passworts eines bereits verbundenen Postfachs. * Nutzt POST /api/mail/connect (upsert) — Backend ersetzt verschlüsseltes Passwort. */ export function EditMailAccountSheet({ visible, email, onClose, onSuccess }: Props) { const { t } = useTranslation(); const colors = useColors(); const { connect, connecting, error: connectError } = useMailConnect(); const [password, setPassword] = useState(''); const [passwordVisible, setPasswordVisible] = useState(false); const [formError, setFormError] = useState(null); function handleClose() { setPassword(''); setPasswordVisible(false); setFormError(null); onClose(); } async function handleSave() { if (!password.trim()) { setFormError(t('mail.form_fields_required')); return; } setFormError(null); const result = await connect({ email, password }); if (result.ok) { handleClose(); onSuccess(); } else { setFormError(result.error ?? t('mail.connect_failed')); } } const header = ( {t('mail.edit_account_cancel')} {t('mail.edit_account_title')} ); return ( {t('mail.edit_account_subtitle', { email })} { setPassword(v); setFormError(null); }} placeholder={t('mail.app_password_placeholder')} placeholderTextColor={colors.textMuted} secureTextEntry={!passwordVisible} autoCapitalize="none" autoCorrect={false} style={{ flex: 1, paddingVertical: 14, fontSize: 15, fontFamily: 'Nunito_400Regular', color: colors.text, }} /> setPasswordVisible((p) => !p)} hitSlop={8}> {(formError ?? connectError) && ( {formError ? formError : t(humanizeMailError(connectError))} )} ({ marginTop: 4, opacity: pressed ? 0.85 : 1, })} > {connecting ? ( ) : ( {t('mail.edit_account_save')} )} ); }