import React, { useState, useEffect } from 'react' import { Provider } from '../../shared/types' import { updateCoAuthoredSetting, checkCoAuthoredSetting, extractWebsiteUrl } from '../utils/providerConfigUtils' import { providerPresets } from '../config/providerPresets' import './AddProviderModal.css' interface ProviderFormProps { title: string submitText: string initialData?: Provider showPresets?: boolean onSubmit: (data: Omit) => void onClose: () => void } const ProviderForm: React.FC = ({ title, submitText, initialData, showPresets = false, onSubmit, onClose }) => { const [formData, setFormData] = useState({ name: initialData?.name || '', websiteUrl: initialData?.websiteUrl || '', settingsConfig: initialData ? JSON.stringify(initialData.settingsConfig, null, 2) : '' }) const [error, setError] = useState('') const [disableCoAuthored, setDisableCoAuthored] = useState(false) // 初始化时检查禁用签名状态 useEffect(() => { if (initialData) { const configString = JSON.stringify(initialData.settingsConfig, null, 2) const hasCoAuthoredDisabled = checkCoAuthoredSetting(configString) setDisableCoAuthored(hasCoAuthoredDisabled) } }, [initialData]) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() setError('') if (!formData.name) { setError('请填写供应商名称') return } if (!formData.settingsConfig.trim()) { setError('请填写配置内容') return } let settingsConfig: Record try { settingsConfig = JSON.parse(formData.settingsConfig) } catch (err) { setError('配置JSON格式错误,请检查语法') return } onSubmit({ name: formData.name, websiteUrl: formData.websiteUrl, settingsConfig }) } const handleChange = ( e: React.ChangeEvent ) => { const { name, value } = e.target if (name === 'settingsConfig') { // 当用户修改配置时,尝试自动提取官网地址 const extractedWebsiteUrl = extractWebsiteUrl(value) // 同时检查并同步选择框状态 const hasCoAuthoredDisabled = checkCoAuthoredSetting(value) setDisableCoAuthored(hasCoAuthoredDisabled) setFormData({ ...formData, [name]: value, // 只有在官网地址为空时才自动填入 websiteUrl: formData.websiteUrl || extractedWebsiteUrl, }) } else { setFormData({ ...formData, [name]: value, }) } } // 处理选择框变化 const handleCoAuthoredToggle = (checked: boolean) => { setDisableCoAuthored(checked) // 更新JSON配置 const updatedConfig = updateCoAuthoredSetting(formData.settingsConfig, checked) setFormData({ ...formData, settingsConfig: updatedConfig, }) } const applyPreset = (preset: typeof providerPresets[0]) => { const configString = JSON.stringify(preset.settingsConfig, null, 2) setFormData({ name: preset.name, websiteUrl: preset.websiteUrl, settingsConfig: configString }) // 同步选择框状态 const hasCoAuthoredDisabled = checkCoAuthoredSetting(configString) setDisableCoAuthored(hasCoAuthoredDisabled) } return (

{title}

{error &&
{error}
} {showPresets && (
{providerPresets.map((preset, index) => ( ))}
)}