mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-06-06 04:55:45 +08:00
93 lines
3.1 KiB
TypeScript
93 lines
3.1 KiB
TypeScript
import { useMemo, useState } from 'react';
|
|
|
|
import type { AgentCategory, AgentProvider } from '../../../types/types';
|
|
|
|
import type { AgentContext, AgentsSettingsTabProps } from './types';
|
|
import AgentCategoryContentSection from './sections/AgentCategoryContentSection';
|
|
import AgentCategoryTabsSection from './sections/AgentCategoryTabsSection';
|
|
import AgentSelectorSection from './sections/AgentSelectorSection';
|
|
|
|
export default function AgentsSettingsTab({
|
|
providerAuthStatus,
|
|
onProviderLogin,
|
|
claudePermissions,
|
|
onClaudePermissionsChange,
|
|
cursorPermissions,
|
|
onCursorPermissionsChange,
|
|
codexPermissionMode,
|
|
onCodexPermissionModeChange,
|
|
geminiPermissionMode,
|
|
onGeminiPermissionModeChange,
|
|
projects,
|
|
}: AgentsSettingsTabProps) {
|
|
const [selectedAgent, setSelectedAgent] = useState<AgentProvider>('claude');
|
|
const [selectedCategory, setSelectedCategory] = useState<AgentCategory>('account');
|
|
|
|
const visibleAgents = useMemo<AgentProvider[]>(() => {
|
|
return ['claude', 'cursor', 'codex', 'gemini', 'opencode'];
|
|
}, []);
|
|
|
|
const agentContextById = useMemo<Record<AgentProvider, AgentContext>>(() => ({
|
|
claude: {
|
|
authStatus: providerAuthStatus.claude,
|
|
onLogin: () => onProviderLogin('claude'),
|
|
},
|
|
cursor: {
|
|
authStatus: providerAuthStatus.cursor,
|
|
onLogin: () => onProviderLogin('cursor'),
|
|
},
|
|
codex: {
|
|
authStatus: providerAuthStatus.codex,
|
|
onLogin: () => onProviderLogin('codex'),
|
|
},
|
|
gemini: {
|
|
authStatus: providerAuthStatus.gemini,
|
|
onLogin: () => onProviderLogin('gemini'),
|
|
},
|
|
opencode: {
|
|
authStatus: providerAuthStatus.opencode,
|
|
onLogin: () => onProviderLogin('opencode'),
|
|
},
|
|
}), [
|
|
onProviderLogin,
|
|
providerAuthStatus.claude,
|
|
providerAuthStatus.codex,
|
|
providerAuthStatus.cursor,
|
|
providerAuthStatus.gemini,
|
|
providerAuthStatus.opencode,
|
|
]);
|
|
|
|
return (
|
|
<div className="-mx-4 -mb-4 -mt-2 flex min-h-[300px] flex-col overflow-hidden md:-mx-6 md:-mb-6 md:-mt-2 md:min-h-[500px]">
|
|
<AgentSelectorSection
|
|
agents={visibleAgents}
|
|
selectedAgent={selectedAgent}
|
|
onSelectAgent={setSelectedAgent}
|
|
agentContextById={agentContextById}
|
|
/>
|
|
|
|
<div className="flex flex-1 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}
|
|
geminiPermissionMode={geminiPermissionMode}
|
|
onGeminiPermissionModeChange={onGeminiPermissionModeChange}
|
|
projects={projects}
|
|
/>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|