import { useState } from 'react'; import { ActivityIndicator, Image, Text, TouchableOpacity, View, } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import { useTranslation } from 'react-i18next'; import { isValidDomain, normalizeDomain, type Tier, } from '../../hooks/useCustomDomains'; import { useColors } from '../../lib/theme'; import { FormSheet } from '../FormSheet'; import { SheetFieldStack } from '../SheetFieldStack'; type Props = { visible: boolean; tier: Tier; onClose: () => void; onAdd: (domain: string) => Promise<{ ok: boolean; error?: string; alreadyGlobal?: boolean }>; }; export function AddDomainSheet({ visible, tier, onClose, onAdd }: Props) { const { t } = useTranslation(); const colors = useColors(); const [input, setInput] = useState(''); const [confirmPermanent, setConfirmPermanent] = useState(false); const [adding, setAdding] = useState(false); const [error, setError] = useState(null); const [fieldsDone, setFieldsDone] = useState(false); const normalized = normalizeDomain(input); function close() { setInput(''); setConfirmPermanent(false); setError(null); setFieldsDone(false); onClose(); } async function handleAdd() { if (!isValidDomain(input) || !confirmPermanent || adding) return; setAdding(true); setError(null); const result = await onAdd(input); setAdding(false); if (result.ok) { close(); return; } if (result.alreadyGlobal) { setError(t('blocker.add_sheet_already_global', { domain: normalized })); } else { setError(result.error ?? t('blocker.add_sheet_add_failed')); } } const warningText = tier.plan === 'free' ? t('blocker.add_sheet_warning_free') : t('blocker.add_sheet_warning_pro'); return ( { setInput(v); setError(null); }, normalize: normalizeDomain, keyboardType: 'url', autoCapitalize: 'none', autoCorrect: false, validate: (v) => isValidDomain(v) ? undefined : t('blocker.add_sheet_invalid'), }, ]} onComplete={() => setFieldsDone(true)} > {/* Favicon-Preview */} {normalized} {/* Warnung */} {warningText} {/* Confirm-Checkbox */} setConfirmPermanent((v) => !v)} activeOpacity={0.7} style={{ flexDirection: 'row', alignItems: 'flex-start', gap: 10, paddingVertical: 4, marginBottom: 14, }} > {confirmPermanent && } {t('blocker.add_sheet_confirm_permanent')} {error && ( {error} )} {/* Add-Button */} {adding ? ( ) : ( {t('blocker.add_sheet_title')} )} ); }