refactor: enhance MCPService error handling and improve loading state in MCPSettings
- Updated MCPService to use a dedicated method for setting server active status upon activation errors, improving code clarity. - Added loading state management in MCPSettings to provide user feedback during server activation toggles, enhancing the user experience.
This commit is contained in:
parent
899c183c5c
commit
456ad612aa
@ -376,7 +376,7 @@ export default class MCPService extends EventEmitter {
|
|||||||
this.emit('server-started', { name })
|
this.emit('server-started', { name })
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error(`[MCP] Error activating server ${name}:`, error)
|
log.error(`[MCP] Error activating server ${name}:`, error)
|
||||||
server.isActive = false
|
this.setServerActive({ name, isActive: false })
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { useTheme } from '@renderer/context/ThemeProvider'
|
|||||||
import { useAppSelector } from '@renderer/store'
|
import { useAppSelector } from '@renderer/store'
|
||||||
import { MCPServer } from '@renderer/types'
|
import { MCPServer } from '@renderer/types'
|
||||||
import { Button, Space, Switch, Table, Tag, Tooltip, Typography } from 'antd'
|
import { Button, Space, Switch, Table, Tag, Tooltip, Typography } from 'antd'
|
||||||
import { FC } from 'react'
|
import { FC, useState } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|
||||||
import { SettingContainer, SettingDivider, SettingGroup, SettingTitle } from '..'
|
import { SettingContainer, SettingDivider, SettingGroup, SettingTitle } from '..'
|
||||||
@ -18,6 +18,7 @@ const MCPSettings: FC = () => {
|
|||||||
const { theme } = useTheme()
|
const { theme } = useTheme()
|
||||||
const { Paragraph, Text } = Typography
|
const { Paragraph, Text } = Typography
|
||||||
const mcpServers = useAppSelector((state) => state.mcp.servers)
|
const mcpServers = useAppSelector((state) => state.mcp.servers)
|
||||||
|
const [loadingServer, setLoadingServer] = useState<string | null>(null)
|
||||||
|
|
||||||
const handleDelete = (serverName: string) => {
|
const handleDelete = (serverName: string) => {
|
||||||
window.modal.confirm({
|
window.modal.confirm({
|
||||||
@ -39,10 +40,13 @@ const MCPSettings: FC = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleToggleActive = async (name: string, isActive: boolean) => {
|
const handleToggleActive = async (name: string, isActive: boolean) => {
|
||||||
|
setLoadingServer(name)
|
||||||
try {
|
try {
|
||||||
await window.api.mcp.setServerActive(name, isActive)
|
await window.api.mcp.setServerActive(name, isActive)
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
window.message.error(`${t('settings.mcp.toggleError')}: ${error.message}`)
|
window.message.error(`${t('settings.mcp.toggleError')}: ${error.message}`)
|
||||||
|
} finally {
|
||||||
|
setLoadingServer(null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +99,11 @@ const MCPSettings: FC = () => {
|
|||||||
key: 'isActive',
|
key: 'isActive',
|
||||||
width: '100px',
|
width: '100px',
|
||||||
render: (isActive: boolean, record: MCPServer) => (
|
render: (isActive: boolean, record: MCPServer) => (
|
||||||
<Switch checked={isActive} onChange={(checked) => handleToggleActive(record.name, checked)} />
|
<Switch
|
||||||
|
checked={isActive}
|
||||||
|
loading={loadingServer === record.name}
|
||||||
|
onChange={(checked) => handleToggleActive(record.name, checked)}
|
||||||
|
/>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user