import { Badge } from '../../../ui/badge'; import { Button } from '../../../ui/button'; import { Check, Clock, Edit2, Trash2, X } from 'lucide-react'; import type { TFunction } from 'i18next'; import { cn } from '../../../../lib/utils'; import { formatTimeAgo } from '../../../../utils/dateUtils'; import type { Project, ProjectSession, SessionProvider } from '../../../../types/app'; import type { SessionWithProvider, TouchHandlerFactory } from '../../types/types'; import { createSessionViewModel } from '../../utils/utils'; import SessionProviderLogo from '../../../llm-logo-provider/SessionProviderLogo'; type SidebarSessionItemProps = { project: Project; session: SessionWithProvider; selectedSession: ProjectSession | null; currentTime: Date; editingSession: string | null; editingSessionName: string; onEditingSessionNameChange: (value: string) => void; onStartEditingSession: (sessionId: string, initialName: string) => void; onCancelEditingSession: () => void; onSaveEditingSession: (projectName: string, sessionId: string, summary: string, provider: SessionProvider) => void; onProjectSelect: (project: Project) => void; onSessionSelect: (session: SessionWithProvider, projectName: string) => void; onDeleteSession: ( projectName: string, sessionId: string, sessionTitle: string, provider: SessionProvider, ) => void; touchHandlerFactory: TouchHandlerFactory; t: TFunction; }; export default function SidebarSessionItem({ project, session, selectedSession, currentTime, editingSession, editingSessionName, onEditingSessionNameChange, onStartEditingSession, onCancelEditingSession, onSaveEditingSession, onProjectSelect, onSessionSelect, onDeleteSession, touchHandlerFactory, t, }: SidebarSessionItemProps) { const sessionView = createSessionViewModel(session, currentTime, t); const isSelected = selectedSession?.id === session.id; const selectMobileSession = () => { onProjectSelect(project); onSessionSelect(session, project.name); }; const saveEditedSession = () => { onSaveEditingSession(project.name, session.id, editingSessionName, session.__provider); }; const requestDeleteSession = () => { onDeleteSession(project.name, session.id, sessionView.sessionName, session.__provider); }; return (
{sessionView.isActive && (
)}
{sessionView.sessionName}
{formatTimeAgo(sessionView.sessionTime, currentTime, t)} {sessionView.messageCount > 0 && ( {sessionView.messageCount} )}
{!sessionView.isCursorSession && ( )}
{editingSession === session.id ? ( <> onEditingSessionNameChange(event.target.value)} onKeyDown={(event) => { event.stopPropagation(); if (event.key === 'Enter') { saveEditedSession(); } else if (event.key === 'Escape') { onCancelEditingSession(); } }} onClick={(event) => event.stopPropagation()} className="w-32 px-2 py-1 text-xs border border-border rounded bg-background focus:outline-none focus:ring-1 focus:ring-primary" autoFocus /> ) : ( <> {!sessionView.isCursorSession && ( )} )}
); }