From 00d1b4c354637ec53bdcc4b07f71933d3a8d60ca Mon Sep 17 00:00:00 2001 From: one Date: Sun, 17 Aug 2025 19:41:41 +0800 Subject: [PATCH] feat: add a delete button, improve button style --- .../settings/MCPSettings/McpServersList.tsx | 74 +++++++++++++------ 1 file changed, 53 insertions(+), 21 deletions(-) diff --git a/src/renderer/src/pages/settings/MCPSettings/McpServersList.tsx b/src/renderer/src/pages/settings/MCPSettings/McpServersList.tsx index cc2364db32..54e171891a 100644 --- a/src/renderer/src/pages/settings/MCPSettings/McpServersList.tsx +++ b/src/renderer/src/pages/settings/MCPSettings/McpServersList.tsx @@ -1,13 +1,13 @@ import { nanoid } from '@reduxjs/toolkit' import { DraggableList } from '@renderer/components/DraggableList' -import { EditIcon, RefreshIcon } from '@renderer/components/Icons' +import { DeleteIcon, EditIcon, RefreshIcon } from '@renderer/components/Icons' import Scrollbar from '@renderer/components/Scrollbar' import { useMCPServers } from '@renderer/hooks/useMCPServers' import { getMcpTypeLabel } from '@renderer/i18n/label' import { MCPServer } from '@renderer/types' import { formatMcpError } from '@renderer/utils/error' import { Badge, Button, Dropdown, Empty, Switch, Tag } from 'antd' -import { MonitorCheck, Plus, Settings2, SquareArrowOutUpRight } from 'lucide-react' +import { Plus, Settings2, SquareArrowOutUpRight } from 'lucide-react' import { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router' @@ -22,7 +22,7 @@ import McpMarketList from './McpMarketList' import SyncServersPopup from './SyncServersPopup' const McpServersList: FC = () => { - const { mcpServers, addMCPServer, updateMcpServers, updateMCPServer } = useMCPServers() + const { mcpServers, addMCPServer, deleteMCPServer, updateMcpServers, updateMCPServer } = useMCPServers() const { t } = useTranslation() const navigate = useNavigate() const [isAddModalVisible, setIsAddModalVisible] = useState(false) @@ -88,6 +88,30 @@ const McpServersList: FC = () => { window.message.success({ content: t('settings.mcp.addSuccess'), key: 'mcp-list' }) }, [addMCPServer, navigate, t]) + const onDeleteMcpServer = useCallback( + async (server: MCPServer) => { + try { + window.modal.confirm({ + title: t('settings.mcp.deleteServer'), + content: t('settings.mcp.deleteServerConfirm'), + centered: true, + onOk: async () => { + await window.api.mcp.removeServer(server) + deleteMCPServer(server.id) + window.message.success({ content: t('settings.mcp.deleteSuccess'), key: 'mcp-list' }) + } + }) + } catch (error: any) { + window.message.error({ + content: `${t('settings.mcp.deleteError')}: ${error.message}`, + key: 'mcp-list' + }) + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [t] + ) + const onSyncServers = useCallback(() => { SyncServersPopup.show(mcpServers) }, [mcpServers]) @@ -198,18 +222,19 @@ const McpServersList: FC = () => { {serverVersions[server.id] && } {server.providerUrl && ( + onClick={(e) => { + e.stopPropagation() + window.open(server.providerUrl, '_blank') + }} + /> )} - - - - e.stopPropagation()}> + e.stopPropagation()}> { size="small" />