import { Collapse } from '@/components/collapse'; import { Button, ButtonLoading } from '@/components/ui/button'; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { useTestMcpServer } from '@/hooks/use-mcp-request'; import { IModalProps } from '@/interfaces/common'; import { IMCPTool, IMCPToolObject } from '@/interfaces/database/mcp'; import { omit } from 'lodash'; import { RefreshCw } from 'lucide-react'; import { MouseEventHandler, useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; import { EditMcpForm, FormId, useBuildFormSchema } from './edit-mcp-form'; import { McpToolCard } from './tool-card'; function transferToolToObject(tools: IMCPTool[] = []) { return tools.reduce((pre, tool) => { pre[tool.name] = omit(tool, 'name'); return pre; }, {}); } export function EditMcpDialog({ hideModal, loading, onOk }: IModalProps) { const { t } = useTranslation(); const { testMcpServer, data: tools } = useTestMcpServer(); const [isTriggeredBySaving, setIsTriggeredBySaving] = useState(false); const FormSchema = useBuildFormSchema(); const handleTest: MouseEventHandler = useCallback((e) => { e.stopPropagation(); setIsTriggeredBySaving(false); }, []); const handleSave: MouseEventHandler = useCallback(() => { setIsTriggeredBySaving(true); }, []); const handleOk = async (values: z.infer) => { if (isTriggeredBySaving) { onOk?.({ ...values, variables: { ...(values?.variables || {}), tools: transferToolToObject(tools), }, }); } else { testMcpServer(values); } }; return ( Edit profile {tools?.length || 0} tools available} rightContent={ } >
{tools?.map((x) => ( ))}
{t('common.save')}
); }