feat(i18n): add delete server confirmation messages in multiple languages
This commit is contained in:
parent
57ba91072d
commit
11c070a1d7
@ -1027,7 +1027,9 @@
|
||||
"inputSchema": "Input Schema",
|
||||
"availableTools": "Available Tools",
|
||||
"noToolsAvailable": "No tools available"
|
||||
}
|
||||
},
|
||||
"deleteServer": "Delete Server",
|
||||
"deleteServerConfirm": "Are you sure you want to delete this server?"
|
||||
},
|
||||
"messages.divider": "Show divider between messages",
|
||||
"messages.grid_columns": "Message grid display columns",
|
||||
|
||||
@ -1026,7 +1026,9 @@
|
||||
"inputSchema": "入力スキーマ",
|
||||
"availableTools": "利用可能なツール",
|
||||
"noToolsAvailable": "利用可能なツールはありません"
|
||||
}
|
||||
},
|
||||
"deleteServer": "サーバーを削除",
|
||||
"deleteServerConfirm": "このサーバーを削除してもよろしいですか?"
|
||||
},
|
||||
"messages.divider": "メッセージ間に区切り線を表示",
|
||||
"messages.grid_columns": "メッセージグリッドの表示列数",
|
||||
|
||||
@ -1026,7 +1026,9 @@
|
||||
"inputSchema": "входные параметры",
|
||||
"availableTools": "доступные инструменты",
|
||||
"noToolsAvailable": "нет доступных инструментов"
|
||||
}
|
||||
},
|
||||
"deleteServer": "Удалить сервер",
|
||||
"deleteServerConfirm": "Вы уверены, что хотите удалить этот сервер?"
|
||||
},
|
||||
"messages.divider": "Показывать разделитель между сообщениями",
|
||||
"messages.grid_columns": "Количество столбцов сетки сообщений",
|
||||
|
||||
@ -1027,7 +1027,9 @@
|
||||
"inputSchema": "输入参数",
|
||||
"availableTools": "可用工具",
|
||||
"noToolsAvailable": "没有可用工具"
|
||||
}
|
||||
},
|
||||
"deleteServer": "删除服务器",
|
||||
"deleteServerConfirm": "确定要删除此服务器吗?"
|
||||
},
|
||||
"messages.divider": "消息分割线",
|
||||
"messages.grid_columns": "消息网格展示列数",
|
||||
|
||||
@ -1026,7 +1026,9 @@
|
||||
"inputSchema": "輸入參數",
|
||||
"availableTools": "可用工具",
|
||||
"noToolsAvailable": "沒有可用工具"
|
||||
}
|
||||
},
|
||||
"deleteServer": "刪除伺服器",
|
||||
"deleteServerConfirm": "確定要刪除此伺服器嗎?"
|
||||
},
|
||||
"messages.divider": "訊息間顯示分隔線",
|
||||
"messages.grid_columns": "訊息網格展示列數",
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import { DeleteOutlined, SaveOutlined } from '@ant-design/icons'
|
||||
import { useMCPServers } from '@renderer/hooks/useMCPServers'
|
||||
import { MCPServer, MCPTool } from '@renderer/types'
|
||||
import { Button, Flex, Form, Input, Radio, Switch } from 'antd'
|
||||
@ -159,9 +160,16 @@ const McpSettings: React.FC<Props> = ({ server }) => {
|
||||
const onDeleteMcpServer = useCallback(
|
||||
async (server: MCPServer) => {
|
||||
try {
|
||||
await window.api.mcp.removeServer(server)
|
||||
deleteMCPServer(server.id)
|
||||
window.message.success({ content: t('settings.mcp.deleteSuccess'), key: 'mcp-list' })
|
||||
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}`,
|
||||
@ -214,7 +222,10 @@ const McpSettings: React.FC<Props> = ({ server }) => {
|
||||
<SettingContainer>
|
||||
<SettingGroup style={{ marginBottom: 0 }}>
|
||||
<SettingTitle>
|
||||
<ServerName>{server?.name}</ServerName>
|
||||
<Flex justify="space-between" align="center" gap={5} style={{ marginRight: 10 }}>
|
||||
<ServerName className="text-nowrap">{server?.name}</ServerName>
|
||||
<Button danger icon={<DeleteOutlined />} type="text" onClick={() => onDeleteMcpServer(server)} />
|
||||
</Flex>
|
||||
<Flex align="center" gap={16}>
|
||||
<Switch
|
||||
value={server.isActive}
|
||||
@ -222,12 +233,9 @@ const McpSettings: React.FC<Props> = ({ server }) => {
|
||||
loading={loadingServer === server.id}
|
||||
onChange={onToggleActive}
|
||||
/>
|
||||
<Button type="primary" size="small" onClick={onSave} loading={loading} disabled={!isFormChanged}>
|
||||
<Button type="primary" icon={<SaveOutlined />} onClick={onSave} loading={loading} disabled={!isFormChanged}>
|
||||
{t('common.save')}
|
||||
</Button>
|
||||
<Button danger type="primary" size="small" onClick={() => onDeleteMcpServer(server)} loading={loading}>
|
||||
{t('common.delete')}
|
||||
</Button>
|
||||
</Flex>
|
||||
</SettingTitle>
|
||||
<SettingDivider />
|
||||
@ -288,7 +296,6 @@ const McpSettings: React.FC<Props> = ({ server }) => {
|
||||
</>
|
||||
)}
|
||||
</Form>
|
||||
|
||||
{server.isActive && <MCPToolsSection tools={tools} />}
|
||||
</SettingGroup>
|
||||
</SettingContainer>
|
||||
|
||||
@ -39,8 +39,10 @@ const NpxSearch: FC = () => {
|
||||
_searchResults = searchResults
|
||||
|
||||
// Add new function to handle npm scope search
|
||||
const handleNpmSearch = async () => {
|
||||
if (!npmScope.trim()) {
|
||||
const handleNpmSearch = async (scopeOverride?: string) => {
|
||||
const searchScope = scopeOverride || npmScope
|
||||
console.log('handleNpmSearch', searchScope)
|
||||
if (!searchScope.trim()) {
|
||||
window.message.warning({ content: t('settings.mcp.npx_list.scope_required'), key: 'mcp-npx-scope-required' })
|
||||
return
|
||||
}
|
||||
@ -53,7 +55,7 @@ const NpxSearch: FC = () => {
|
||||
|
||||
try {
|
||||
// Call npxFinder to search for packages
|
||||
const packages = await npxFinder(npmScope)
|
||||
const packages = await npxFinder(searchScope)
|
||||
|
||||
// Map the packages to our desired format
|
||||
const formattedResults = packages.map((pkg) => {
|
||||
@ -74,6 +76,8 @@ const NpxSearch: FC = () => {
|
||||
window.message.info({ content: t('settings.mcp.npx_list.no_packages'), key: 'mcp-npx-no-packages' })
|
||||
}
|
||||
} catch (error: unknown) {
|
||||
setSearchResults([])
|
||||
_searchResults = []
|
||||
if (error instanceof Error) {
|
||||
window.message.error({
|
||||
content: `${t('settings.mcp.npx_list.search_error')}: ${error.message}`,
|
||||
@ -101,9 +105,9 @@ const NpxSearch: FC = () => {
|
||||
placeholder={t('settings.mcp.npx_list.scope_placeholder')}
|
||||
value={npmScope}
|
||||
onChange={(e) => setNpmScope(e.target.value)}
|
||||
onPressEnter={handleNpmSearch}
|
||||
onPressEnter={() => handleNpmSearch(npmScope)}
|
||||
/>
|
||||
<Button icon={<SearchOutlined />} onClick={handleNpmSearch} disabled={searchLoading}>
|
||||
<Button icon={<SearchOutlined />} onClick={() => handleNpmSearch(npmScope)} disabled={searchLoading}>
|
||||
{t('settings.mcp.npx_list.search')}
|
||||
</Button>
|
||||
</Space.Compact>
|
||||
@ -112,10 +116,8 @@ const NpxSearch: FC = () => {
|
||||
<Tag
|
||||
key={scope}
|
||||
onClick={() => {
|
||||
if (!searchLoading) {
|
||||
setNpmScope(scope)
|
||||
setTimeout(handleNpmSearch, 100)
|
||||
}
|
||||
setNpmScope(scope)
|
||||
handleNpmSearch(scope)
|
||||
}}
|
||||
style={{ cursor: searchLoading ? 'not-allowed' : 'pointer' }}>
|
||||
{scope}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user