mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-03-02 12:37:42 +00:00
Replace blocking alert() calls in MCP delete handlers with non-blocking deleteError state updates and setSaveStatus('error') on failure.
Thread deleteError through Settings -> Agents settings views and render inline error feedback in Claude/Codex MCP sections near delete actions.
Prevent orphaned save-close timers by clearing and nulling closeTimerRef before scheduling a new timeout, and by nulling the ref during unmount cleanup.
102 lines
3.2 KiB
TypeScript
102 lines
3.2 KiB
TypeScript
import { useMemo, useState } from 'react';
|
|
import type { AgentCategory, AgentProvider } from '../../../types/types';
|
|
import AgentCategoryContentSection from './sections/AgentCategoryContentSection';
|
|
import AgentCategoryTabsSection from './sections/AgentCategoryTabsSection';
|
|
import AgentSelectorSection from './sections/AgentSelectorSection';
|
|
import type { AgentContext, AgentsSettingsTabProps } from './types';
|
|
|
|
export default function AgentsSettingsTab({
|
|
claudeAuthStatus,
|
|
cursorAuthStatus,
|
|
codexAuthStatus,
|
|
onClaudeLogin,
|
|
onCursorLogin,
|
|
onCodexLogin,
|
|
claudePermissions,
|
|
onClaudePermissionsChange,
|
|
cursorPermissions,
|
|
onCursorPermissionsChange,
|
|
codexPermissionMode,
|
|
onCodexPermissionModeChange,
|
|
mcpServers,
|
|
cursorMcpServers,
|
|
codexMcpServers,
|
|
mcpTestResults,
|
|
mcpServerTools,
|
|
mcpToolsLoading,
|
|
deleteError,
|
|
onOpenMcpForm,
|
|
onDeleteMcpServer,
|
|
onTestMcpServer,
|
|
onDiscoverMcpTools,
|
|
onOpenCodexMcpForm,
|
|
onDeleteCodexMcpServer,
|
|
}: AgentsSettingsTabProps) {
|
|
const [selectedAgent, setSelectedAgent] = useState<AgentProvider>('claude');
|
|
const [selectedCategory, setSelectedCategory] = useState<AgentCategory>('account');
|
|
|
|
const agentContextById = useMemo<Record<AgentProvider, AgentContext>>(() => ({
|
|
claude: {
|
|
authStatus: claudeAuthStatus,
|
|
onLogin: onClaudeLogin,
|
|
},
|
|
cursor: {
|
|
authStatus: cursorAuthStatus,
|
|
onLogin: onCursorLogin,
|
|
},
|
|
codex: {
|
|
authStatus: codexAuthStatus,
|
|
onLogin: onCodexLogin,
|
|
},
|
|
}), [
|
|
claudeAuthStatus,
|
|
codexAuthStatus,
|
|
cursorAuthStatus,
|
|
onClaudeLogin,
|
|
onCodexLogin,
|
|
onCursorLogin,
|
|
]);
|
|
|
|
return (
|
|
<div className="flex flex-col md:flex-row h-full min-h-[400px] md:min-h-[500px]">
|
|
<AgentSelectorSection
|
|
selectedAgent={selectedAgent}
|
|
onSelectAgent={setSelectedAgent}
|
|
agentContextById={agentContextById}
|
|
/>
|
|
|
|
<div className="flex-1 flex flex-col overflow-hidden">
|
|
<AgentCategoryTabsSection
|
|
selectedCategory={selectedCategory}
|
|
onSelectCategory={setSelectedCategory}
|
|
/>
|
|
|
|
<AgentCategoryContentSection
|
|
selectedAgent={selectedAgent}
|
|
selectedCategory={selectedCategory}
|
|
agentContextById={agentContextById}
|
|
claudePermissions={claudePermissions}
|
|
onClaudePermissionsChange={onClaudePermissionsChange}
|
|
cursorPermissions={cursorPermissions}
|
|
onCursorPermissionsChange={onCursorPermissionsChange}
|
|
codexPermissionMode={codexPermissionMode}
|
|
onCodexPermissionModeChange={onCodexPermissionModeChange}
|
|
mcpServers={mcpServers}
|
|
cursorMcpServers={cursorMcpServers}
|
|
codexMcpServers={codexMcpServers}
|
|
mcpTestResults={mcpTestResults}
|
|
mcpServerTools={mcpServerTools}
|
|
mcpToolsLoading={mcpToolsLoading}
|
|
deleteError={deleteError}
|
|
onOpenMcpForm={onOpenMcpForm}
|
|
onDeleteMcpServer={onDeleteMcpServer}
|
|
onTestMcpServer={onTestMcpServer}
|
|
onDiscoverMcpTools={onDiscoverMcpTools}
|
|
onOpenCodexMcpForm={onOpenCodexMcpForm}
|
|
onDeleteCodexMcpServer={onDeleteCodexMcpServer}
|
|
/>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|