mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-02-20 15:47:36 +00:00
80 lines
2.7 KiB
TypeScript
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>
|
|
);
|
|
}
|