import { MessageSquare, Terminal, Folder, GitBranch, ClipboardCheck, type LucideIcon } from 'lucide-react'; import type { Dispatch, SetStateAction } from 'react'; import { useTranslation } from 'react-i18next'; import { Tooltip } from '../../../../shared/view/ui'; import type { AppTab } from '../../../../types/app'; import { usePlugins } from '../../../../contexts/PluginsContext'; import PluginIcon from '../../../plugins/PluginIcon'; type MainContentTabSwitcherProps = { activeTab: AppTab; setActiveTab: Dispatch>; shouldShowTasksTab: boolean; }; type BuiltInTab = { kind: 'builtin'; id: AppTab; labelKey: string; icon: LucideIcon; }; type PluginTab = { kind: 'plugin'; id: AppTab; label: string; pluginName: string; iconFile: string; }; type TabDefinition = BuiltInTab | PluginTab; const BASE_TABS: BuiltInTab[] = [ { kind: 'builtin', id: 'chat', labelKey: 'tabs.chat', icon: MessageSquare }, { kind: 'builtin', id: 'shell', labelKey: 'tabs.shell', icon: Terminal }, { kind: 'builtin', id: 'files', labelKey: 'tabs.files', icon: Folder }, { kind: 'builtin', id: 'git', labelKey: 'tabs.git', icon: GitBranch }, ]; const TASKS_TAB: BuiltInTab = { kind: 'builtin', id: 'tasks', labelKey: 'tabs.tasks', icon: ClipboardCheck, }; export default function MainContentTabSwitcher({ activeTab, setActiveTab, shouldShowTasksTab, }: MainContentTabSwitcherProps) { const { t } = useTranslation(); const { plugins } = usePlugins(); const builtInTabs: BuiltInTab[] = shouldShowTasksTab ? [...BASE_TABS, TASKS_TAB] : BASE_TABS; const pluginTabs: PluginTab[] = plugins .filter((p) => p.enabled) .map((p) => ({ kind: 'plugin', id: `plugin:${p.name}` as AppTab, label: p.displayName, pluginName: p.name, iconFile: p.icon, })); const tabs: TabDefinition[] = [...builtInTabs, ...pluginTabs]; return (
{tabs.map((tab) => { const isActive = tab.id === activeTab; const displayLabel = tab.kind === 'builtin' ? t(tab.labelKey) : tab.label; return ( ); })}
); }