import { useState } from 'react'; import { Box, TextField, Alert, Stack, alpha } from '@mui/material'; import AddIcon from '@mui/icons-material/Add'; import Button from '@/components/Button'; import type { OpenUrlEntry } from '@/types/storage'; import type { SnackbarOptions } from '@/components/GlobalSnackbar'; import { openUrlPageStyles } from '@/config/pageTheme'; interface UrlEntryFormProps { onAddEntry: (entry: OpenUrlEntry) => void; showMessage: (message: string, options?: SnackbarOptions) => void; } const UrlEntryForm = ({ onAddEntry, showMessage }: UrlEntryFormProps) => { const [newName, setNewName] = useState(''); const [newUrl, setNewUrl] = useState(''); const showMixedContentWarning = newUrl.startsWith('http://') && !newUrl.includes('localhost') && !newUrl.includes('127.0.0.1'); const isValidUrl = (url: string) => { if (!url.trim()) return false; try { new URL(url); return true; } catch { return false; } }; const handleAddEntry = () => { if (!newName.trim()) { showMessage('请输入名称', { severity: 'error' }); return; } if (!isValidUrl(newUrl)) { showMessage('请输入有效的 URL', { severity: 'error' }); return; } onAddEntry({ name: newName.trim(), url: newUrl.trim() }); setNewName(''); setNewUrl(''); showMessage('添加成功', { severity: 'success' }); }; return ( setNewName(e.target.value)} fullWidth variant="outlined" sx={openUrlPageStyles.INPUT_STYLE} /> setNewUrl(e.target.value)} fullWidth variant="outlined" sx={openUrlPageStyles.INPUT_STYLE} /> {showMixedContentWarning && ( 混合内容警告:当前 HTTPS 页面无法加载 HTTP 资源。 )} ); }; export default UrlEntryForm;