import { NativeSelect } from '@/components/form/NativeSelect'; import { useState, useId } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, Form, Input, InputNumber, Space, Typography } from 'antd'; import { Controller, useFormContext } from 'react-hook-form'; import { FormField } from '@/components/form/rhf'; import { VLESS_AUTH_LABEL_KEYS, type VlessAuthKind } from '@/lib/xray/vless-encryption'; interface VlessFieldsProps { saving: boolean; selectedVlessAuth: string; vlessAuthKind: VlessAuthKind | null; network: string; security: string; getNewVlessEnc: (kind: VlessAuthKind) => void; clearVlessEnc: () => void; } export default function VlessFields({ saving, selectedVlessAuth, vlessAuthKind, network, security, getNewVlessEnc, clearVlessEnc, }: VlessFieldsProps) { const { t } = useTranslation(); const uid = useId(); const { control } = useFormContext(); const [authKind, setAuthKind] = useState(vlessAuthKind ?? 'x25519'); const [syncedAuthKind, setSyncedAuthKind] = useState(vlessAuthKind); if (vlessAuthKind !== syncedAuthKind) { setSyncedAuthKind(vlessAuthKind); setAuthKind(vlessAuthKind ?? 'x25519'); } const authOptions = (Object.entries(VLESS_AUTH_LABEL_KEYS) as [VlessAuthKind, string][]).map( ([value, labelKey]) => ({ value, label: t(labelKey) }), ); return ( <> setAuthKind(v)} options={authOptions} style={{ width: 240 }} /> {t('pages.inbounds.vlessAuthSelected', { auth: selectedVlessAuth })} {network === 'tcp' && (security === 'tls' || security === 'reality') && ( {[900, 500, 900, 256].map((def, i) => ( ( )} /> ))} )} ); }