Files
claudecodeui/src/components/main-content/view/subcomponents/MainContentTitle.tsx
2026-02-20 08:10:22 +00:00

80 lines
2.7 KiB
TypeScript

import { useTranslation } from 'react-i18next';
import SessionProviderLogo from '../../../SessionProviderLogo';
import type { AppTab, Project, ProjectSession } from '../../../../types/app';
type MainContentTitleProps = {
activeTab: AppTab;
selectedProject: Project;
selectedSession: ProjectSession | null;
shouldShowTasksTab: boolean;
};
function getTabTitle(activeTab: AppTab, shouldShowTasksTab: boolean, t: (key: string) => string) {
if (activeTab === 'files') {
return t('mainContent.projectFiles');
}
if (activeTab === 'git') {
return t('tabs.git');
}
if (activeTab === 'tasks' && shouldShowTasksTab) {
return 'TaskMaster';
}
return 'Project';
}
function getSessionTitle(session: ProjectSession): string {
if (session.__provider === 'cursor') {
return (session.name as string) || 'Untitled Session';
}
return (session.summary as string) || 'New Session';
}
export default function MainContentTitle({
activeTab,
selectedProject,
selectedSession,
shouldShowTasksTab,
}: MainContentTitleProps) {
const { t } = useTranslation();
const showSessionIcon = activeTab === 'chat' && Boolean(selectedSession);
const showChatNewSession = activeTab === 'chat' && !selectedSession;
return (
<div className="min-w-0 flex items-center gap-2 flex-1 overflow-x-auto scrollbar-hide">
{showSessionIcon && (
<div className="w-5 h-5 flex-shrink-0 flex items-center justify-center">
<SessionProviderLogo provider={selectedSession?.__provider} className="w-4 h-4" />
</div>
)}
<div className="min-w-0 flex-1">
{activeTab === 'chat' && selectedSession ? (
<div className="min-w-0">
<h2 className="text-sm font-semibold text-foreground whitespace-nowrap overflow-x-auto scrollbar-hide leading-tight">
{getSessionTitle(selectedSession)}
</h2>
<div className="text-[11px] text-muted-foreground truncate leading-tight">{selectedProject.displayName}</div>
</div>
) : showChatNewSession ? (
<div className="min-w-0">
<h2 className="text-base font-semibold text-foreground leading-tight">{t('mainContent.newSession')}</h2>
<div className="text-xs text-muted-foreground truncate leading-tight">{selectedProject.displayName}</div>
</div>
) : (
<div className="min-w-0">
<h2 className="text-sm font-semibold text-foreground leading-tight">
{getTabTitle(activeTab, shouldShowTasksTab, t)}
</h2>
<div className="text-[11px] text-muted-foreground truncate leading-tight">{selectedProject.displayName}</div>
</div>
)}
</div>
</div>
);
}