'use client' import React from 'react' import { useTranslation } from 'react-i18next' import { RiCloseLine } from '@remixicon/react' import Modal from '@/app/components/base/modal' import Button from '@/app/components/base/button' import Textarea from '@/app/components/base/textarea' import Divider from '@/app/components/base/divider' import MCPServerParamItem from '@/app/components/tools/mcp/mcp-server-param-item' import type { MCPServerDetail, } from '@/app/components/tools/types' import { useCreateMCPServer, useInvalidateMCPServerDetail, useUpdateMCPServer, } from '@/service/use-tools' import cn from '@/utils/classnames' export type ModalProps = { appID: string latestParams?: any[] data?: MCPServerDetail show: boolean onHide: () => void appInfo?: any } const MCPServerModal = ({ appID, latestParams = [], data, show, onHide, appInfo, }: ModalProps) => { const { t } = useTranslation() const { mutateAsync: createMCPServer, isPending: creating } = useCreateMCPServer() const { mutateAsync: updateMCPServer, isPending: updating } = useUpdateMCPServer() const invalidateMCPServerDetail = useInvalidateMCPServerDetail() const defaultDescription = data?.description || appInfo?.description || '' const [description, setDescription] = React.useState(defaultDescription) const [params, setParams] = React.useState(data?.parameters || {}) const handleParamChange = (variable: string, value: string) => { setParams(prev => ({ ...prev, [variable]: value, })) } const getParamValue = () => { const res = {} as any latestParams.map((param) => { res[param.variable] = params[param.variable] return param }) return res } const submit = async () => { if (!data) { const payload: any = { appID, parameters: getParamValue(), } if (description.trim()) payload.description = description await createMCPServer(payload) invalidateMCPServerDetail(appID) onHide() } else { const payload: any = { appID, id: data.id, parameters: getParamValue(), } payload.description = description await updateMCPServer(payload) invalidateMCPServerDetail(appID) onHide() } } return (
{!data ? t('tools.mcp.server.modal.addTitle') : t('tools.mcp.server.modal.editTitle')}
{t('tools.mcp.server.modal.description')}
*
{latestParams.length > 0 && (
{t('tools.mcp.server.modal.parameters')}
{t('tools.mcp.server.modal.parametersTip')}
{latestParams.map(paramItem => ( handleParamChange(paramItem.variable, value)} /> ))}
)}
) } export default MCPServerModal