import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Alert, Button, Input, InputNumber, Select, Space, Switch, Tabs } from 'antd'; import { MailOutlined, SendOutlined, SettingOutlined } from '@ant-design/icons'; import { HttpUtil } from '@/utils'; import type { AllSetting } from '@/models/setting'; import { SettingListItem } from '@/components/ui'; import { EmailNotifications } from '@/components/ui/notifications/EmailNotifications'; import { useMediaQuery } from '@/hooks/useMediaQuery'; import { catTabLabel } from './catTabLabel'; import SecretInput from './SecretInput'; interface EmailTabProps { allSetting: AllSetting; updateSetting: (patch: Partial) => void; } interface SmtpTestResult { success: boolean; stage?: string; msg: string; } export default function EmailTab({ allSetting, updateSetting }: EmailTabProps) { const { t } = useTranslation(); const { isMobile } = useMediaQuery(); const [testLoading, setTestLoading] = useState(false); const [testResult, setTestResult] = useState(null); const stageLabel: Record = { connect: t('pages.settings.smtpStageConnect'), auth: t('pages.settings.smtpStageAuth'), send: t('pages.settings.smtpStageSend'), }; async function handleTestSmtp() { setTestLoading(true); setTestResult(null); try { const res = await HttpUtil.post('/panel/api/setting/testSmtp') as SmtpTestResult; setTestResult(res); } catch (e: unknown) { setTestResult({ success: false, msg: e instanceof Error ? e.message : t('pages.settings.requestFailed') }); } finally { setTestLoading(false); } } return ( , t('pages.settings.smtpSettings'), isMobile), children: ( <> updateSetting({ smtpEnable: v })} /> updateSetting({ smtpHost: e.target.value })} /> updateSetting({ smtpPort: Number(v) || 587 })} /> updateSetting({ smtpUsername: e.target.value })} /> updateSetting({ smtpPassword: v })} onClearArmedChange={(armed) => updateSetting({ clearSmtpPassword: armed })} /> updateSetting({ smtpFrom: e.target.value })} /> updateSetting({ smtpFromName: e.target.value })} /> updateSetting({ smtpTo: e.target.value })} />