import { useEffect } from 'react'; import type { TFunction } from 'i18next'; import type { LoadingProgress, Project, ProjectSession, SessionProvider } from '../../../../types/app'; import type { LoadingSessionsByProject, MCPServerStatus, SessionWithProvider, TouchHandlerFactory, } from '../../types/types'; import SidebarProjectItem from './SidebarProjectItem'; import SidebarProjectsState from './SidebarProjectsState'; export type SidebarProjectListProps = { projects: Project[]; filteredProjects: Project[]; selectedProject: Project | null; selectedSession: ProjectSession | null; isLoading: boolean; loadingProgress: LoadingProgress | null; expandedProjects: Set; editingProject: string | null; editingName: string; loadingSessions: LoadingSessionsByProject; initialSessionsLoaded: Set; currentTime: Date; editingSession: string | null; editingSessionName: string; deletingProjects: Set; tasksEnabled: boolean; mcpServerStatus: MCPServerStatus; getProjectSessions: (project: Project) => SessionWithProvider[]; isProjectStarred: (projectName: string) => boolean; onEditingNameChange: (value: string) => void; onToggleProject: (projectName: string) => void; onProjectSelect: (project: Project) => void; onToggleStarProject: (projectName: string) => void; onStartEditingProject: (project: Project) => void; onCancelEditingProject: () => void; onSaveProjectName: (projectName: string) => void; onDeleteProject: (project: Project) => void; onSessionSelect: (session: SessionWithProvider, projectName: string) => void; onDeleteSession: ( projectName: string, sessionId: string, sessionTitle: string, provider: SessionProvider, ) => void; onLoadMoreSessions: (project: Project) => void; onNewSession: (project: Project) => void; onEditingSessionNameChange: (value: string) => void; onStartEditingSession: (sessionId: string, initialName: string) => void; onCancelEditingSession: () => void; onSaveEditingSession: (projectName: string, sessionId: string, summary: string, provider: SessionProvider) => void; touchHandlerFactory: TouchHandlerFactory; t: TFunction; }; export default function SidebarProjectList({ projects, filteredProjects, selectedProject, selectedSession, isLoading, loadingProgress, expandedProjects, editingProject, editingName, loadingSessions, initialSessionsLoaded, currentTime, editingSession, editingSessionName, deletingProjects, tasksEnabled, mcpServerStatus, getProjectSessions, isProjectStarred, onEditingNameChange, onToggleProject, onProjectSelect, onToggleStarProject, onStartEditingProject, onCancelEditingProject, onSaveProjectName, onDeleteProject, onSessionSelect, onDeleteSession, onLoadMoreSessions, onNewSession, onEditingSessionNameChange, onStartEditingSession, onCancelEditingSession, onSaveEditingSession, touchHandlerFactory, t, }: SidebarProjectListProps) { const state = ( ); useEffect(() => { let baseTitle = 'CloudCLI UI'; const displayName = selectedProject?.displayName?.trim(); if (displayName) { baseTitle = `${displayName} - ${baseTitle}`; } document.title = baseTitle; }, [selectedProject]); const showProjects = !isLoading && projects.length > 0 && filteredProjects.length > 0; return (
{!showProjects ? state : filteredProjects.map((project) => ( ))}
); }