import React from 'react'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { RiCheckboxBlankLine, RiCheckboxLine } from '@remixicon/react'; import type { Session } from '@opencode-ai/sdk/v2'; import { useI18n } from '@/lib/i18n'; export type DeleteSessionConfirmState = { session: Session; descendantCount: number; archivedBucket: boolean; } | null; export function SessionDeleteConfirmDialog(props: { value: DeleteSessionConfirmState; setValue: (next: DeleteSessionConfirmState) => void; showDeletionDialog: boolean; setShowDeletionDialog: (next: boolean) => void; onConfirm: () => Promise | void; }): React.ReactNode { const { t } = useI18n(); const { value, setValue, showDeletionDialog, setShowDeletionDialog, onConfirm } = props; const untitledSession = t('sessions.sidebar.session.untitled'); return ( { if (!open) setValue(null); }}> {value?.archivedBucket ? t('sessions.sidebar.dialogs.deleteSession.title') : t('sessions.sidebar.dialogs.archiveSession.title')} {value && value.descendantCount > 0 ? value.archivedBucket ? value.descendantCount === 1 ? t('sessions.sidebar.dialogs.deleteSession.withOneSubtask', { sessionTitle: value.session.title || untitledSession, count: value.descendantCount, }) : t('sessions.sidebar.dialogs.deleteSession.withManySubtasks', { sessionTitle: value.session.title || untitledSession, count: value.descendantCount, }) : value.descendantCount === 1 ? t('sessions.sidebar.dialogs.archiveSession.withOneSubtask', { sessionTitle: value.session.title || untitledSession, count: value.descendantCount, }) : t('sessions.sidebar.dialogs.archiveSession.withManySubtasks', { sessionTitle: value.session.title || untitledSession, count: value.descendantCount, }) : value?.archivedBucket ? t('sessions.sidebar.dialogs.deleteSession.single', { sessionTitle: value?.session.title || untitledSession, }) : t('sessions.sidebar.dialogs.archiveSession.single', { sessionTitle: value?.session.title || untitledSession, })}
); } export type BulkDeleteSessionsConfirmState = { sessionCount: number; archivedBucket: boolean; } | null; export function BulkSessionDeleteConfirmDialog(props: { value: BulkDeleteSessionsConfirmState; setValue: (next: BulkDeleteSessionsConfirmState) => void; showDeletionDialog: boolean; setShowDeletionDialog: (next: boolean) => void; onConfirm: () => Promise | void; }): React.ReactNode { const { t } = useI18n(); const { value, setValue, showDeletionDialog, setShowDeletionDialog, onConfirm } = props; const archived = value?.archivedBucket === true; const n = value?.sessionCount ?? 0; const title = archived ? (n === 1 ? t('sessions.sidebar.dialogs.deleteSession.title') : t('sessions.sidebar.dialogs.deleteSessions.title')) : (n === 1 ? t('sessions.sidebar.dialogs.archiveSession.title') : t('sessions.sidebar.dialogs.archiveSessions.title')); const description = archived ? (n === 1 ? t('sessions.sidebar.dialogs.deleteSessions.singleDescription', { count: n }) : t('sessions.sidebar.dialogs.deleteSessions.pluralDescription', { count: n })) : (n === 1 ? t('sessions.sidebar.dialogs.archiveSessions.singleDescription', { count: n }) : t('sessions.sidebar.dialogs.archiveSessions.pluralDescription', { count: n })); return ( { if (!open) setValue(null); }}> {title} {description}
); } export type DeleteFolderConfirmState = { scopeKey: string; folderId: string; folderName: string; subFolderCount: number; sessionCount: number; } | null; export function FolderDeleteConfirmDialog(props: { value: DeleteFolderConfirmState; setValue: (next: DeleteFolderConfirmState) => void; onConfirm: () => void; }): React.ReactNode { const { t } = useI18n(); const { value, setValue, onConfirm } = props; return ( { if (!open) setValue(null); }}> {t('sessions.sidebar.dialogs.deleteFolder.title')} {value && (value.subFolderCount > 0 || value.sessionCount > 0) ? value.subFolderCount > 0 ? value.subFolderCount === 1 ? t('sessions.sidebar.dialogs.deleteFolder.withOneSubfolder', { folderName: value.folderName, count: value.subFolderCount, }) : t('sessions.sidebar.dialogs.deleteFolder.withManySubfolders', { folderName: value.folderName, count: value.subFolderCount, }) : t('sessions.sidebar.dialogs.deleteFolder.withContentsNoSubfolders', { folderName: value.folderName, }) : t('sessions.sidebar.dialogs.deleteFolder.single', { folderName: value?.folderName ?? '', })} ); }