import { useState } from 'react'; import { ActivityIndicator, Text, TouchableOpacity, 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 { FormSheet } from '../FormSheet'; import { SheetFieldStack } from '../SheetFieldStack'; 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 { connect, connecting, error: connectError } = useMailConnect(); const [password, setPassword] = useState(''); const [passwordVisible, setPasswordVisible] = useState(false); const [formError, setFormError] = useState(null); const [fieldsComplete, setFieldsComplete] = useState(false); function handleClose() { setPassword(''); setPasswordVisible(false); setFormError(null); setFieldsComplete(false); onClose(); } async function handleSave() { setFormError(null); const result = await connect({ email, password }); if (result.ok) { handleClose(); onSuccess(); } else { setFormError(result.error ?? t('mail.connect_failed')); } } return ( { setPassword(v); setFormError(null); }, secureTextEntry: !passwordVisible, autoCapitalize: 'none', autoCorrect: false, validate: (v) => v.trim().length === 0 ? t('mail.form_fields_required') : undefined, suffix: ( setPasswordVisible((p) => !p)} hitSlop={8} > ), }, ]} onComplete={() => setFieldsComplete(true)} > {/* Hint + Error + Save-Button */} {t('mail.edit_account_subtitle', { email })} {(formError ?? connectError) && ( {formError ?? t(humanizeMailError(connectError))} )} {connecting ? ( ) : ( {t('mail.edit_account_save')} )} ); }