import { useMemo } from 'react'; import ReactDOM from 'react-dom'; import { AlertTriangle, Trash2 } from 'lucide-react'; import type { TFunction } from 'i18next'; import { Button } from '../../../ui/button'; import ProjectCreationWizard from '../../../ProjectCreationWizard'; import Settings from '../../../Settings'; import VersionUpgradeModal from '../../../modals/VersionUpgradeModal'; import type { Project } from '../../../../types/app'; import type { ReleaseInfo } from '../../../../types/sharedTypes'; import { normalizeProjectForSettings } from '../../utils/utils'; import type { DeleteProjectConfirmation, SessionDeleteConfirmation, SettingsProject } from '../../types/types'; type SidebarModalsProps = { projects: Project[]; showSettings: boolean; settingsInitialTab: string; onCloseSettings: () => void; showNewProject: boolean; onCloseNewProject: () => void; onProjectCreated: () => void; deleteConfirmation: DeleteProjectConfirmation | null; onCancelDeleteProject: () => void; onConfirmDeleteProject: () => void; sessionDeleteConfirmation: SessionDeleteConfirmation | null; onCancelDeleteSession: () => void; onConfirmDeleteSession: () => void; showVersionModal: boolean; onCloseVersionModal: () => void; releaseInfo: ReleaseInfo | null; currentVersion: string; latestVersion: string | null; t: TFunction; }; type TypedSettingsProps = { isOpen: boolean; onClose: () => void; projects: SettingsProject[]; initialTab: string; }; const SettingsComponent = Settings as (props: TypedSettingsProps) => JSX.Element; function TypedSettings(props: TypedSettingsProps) { return ; } export default function SidebarModals({ projects, showSettings, settingsInitialTab, onCloseSettings, showNewProject, onCloseNewProject, onProjectCreated, deleteConfirmation, onCancelDeleteProject, onConfirmDeleteProject, sessionDeleteConfirmation, onCancelDeleteSession, onConfirmDeleteSession, showVersionModal, onCloseVersionModal, releaseInfo, currentVersion, latestVersion, t, }: SidebarModalsProps) { // Settings expects project identity/path fields to be present for dropdown labels and local-scope MCP config. const settingsProjects = useMemo( () => projects.map(normalizeProjectForSettings), [projects], ); return ( <> {showNewProject && ReactDOM.createPortal( , document.body, )} {deleteConfirmation && ReactDOM.createPortal(

{t('deleteConfirmation.deleteProject')}

{t('deleteConfirmation.confirmDelete')}{' '} {deleteConfirmation.project.displayName || deleteConfirmation.project.name} ?

{deleteConfirmation.sessionCount > 0 && (

{t('deleteConfirmation.sessionCount', { count: deleteConfirmation.sessionCount })}

{t('deleteConfirmation.allConversationsDeleted')}

)}

{t('deleteConfirmation.cannotUndo')}

, document.body, )} {sessionDeleteConfirmation && ReactDOM.createPortal(

{t('deleteConfirmation.deleteSession')}

{t('deleteConfirmation.confirmDelete')}{' '} {sessionDeleteConfirmation.sessionTitle || t('sessions.unnamed')} ?

{t('deleteConfirmation.cannotUndo')}

, document.body, )} ); }