import React, { useState, useEffect } from 'react' import { Provider } from '../../shared/types' import { updateCoAuthoredSetting, checkCoAuthoredSetting, extractWebsiteUrl } from '../utils/providerConfigUtils' import './AddProviderModal.css' interface EditProviderModalProps { provider: Provider onSave: (provider: Provider) => void onClose: () => void } const EditProviderModal: React.FC = ({ provider, onSave, onClose }) => { const [formData, setFormData] = useState({ name: provider.name, websiteUrl: provider.websiteUrl || '', settingsConfig: JSON.stringify(provider.settingsConfig, null, 2) }) const [error, setError] = useState('') const [disableCoAuthored, setDisableCoAuthored] = useState(false) // 初始化时更新表单数据 useEffect(() => { const configString = JSON.stringify(provider.settingsConfig, null, 2) setFormData({ name: provider.name, websiteUrl: provider.websiteUrl || '', settingsConfig: configString }) // 同步选择框状态 const hasCoAuthoredDisabled = checkCoAuthoredSetting(configString) setDisableCoAuthored(hasCoAuthoredDisabled) }, [provider]) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() setError('') if (!formData.name) { setError('请填写供应商名称') return } if (!formData.settingsConfig.trim()) { setError('请填写配置内容') return } let settingsConfig: object try { settingsConfig = JSON.parse(formData.settingsConfig) } catch (err) { setError('配置JSON格式错误,请检查语法') return } onSave({ ...provider, 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, }) } return (

编辑供应商

{error && (
{error}
)}