'use client' import { useState, useEffect } from 'react' import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog' import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group' import { Label } from '@/components/ui/label' import { useTranslation } from '@/lib/hooks/use-translation' import { LoadingSpinner } from '@/components/common/LoadingSpinner' import { useNotebookDeletePreview, useDeleteNotebook } from '@/lib/hooks/use-notebooks' import { useRouter } from 'next/navigation' interface NotebookDeleteDialogProps { open: boolean onOpenChange: (open: boolean) => void notebookId: string notebookName: string redirectAfterDelete?: boolean } export function NotebookDeleteDialog({ open, onOpenChange, notebookId, notebookName, redirectAfterDelete = false, }: NotebookDeleteDialogProps) { const { t } = useTranslation() const router = useRouter() const [sourceAction, setSourceAction] = useState<'keep' | 'delete'>('keep') // Reset state when dialog opens useEffect(() => { if (open) { setSourceAction('keep') } }, [open, notebookId]) // Fetch delete preview when dialog is open const { data: preview, isLoading: isLoadingPreview, error: previewError } = useNotebookDeletePreview( notebookId, open ) const deleteNotebook = useDeleteNotebook() const handleConfirm = async () => { await deleteNotebook.mutateAsync({ id: notebookId, deleteExclusiveSources: sourceAction === 'delete', }) onOpenChange(false) if (redirectAfterDelete) { router.push('/notebooks') } } const isDeleting = deleteNotebook.isPending return ( {t('notebooks.deleteNotebook')} {t('notebooks.deleteNotebookDesc').replace('{name}', notebookName)}
{isLoadingPreview ? (
{t('notebooks.deleteNotebookLoading')}
) : previewError ? (
{t('common.error')}: {previewError.message || 'Failed to load preview'}
) : preview ? ( <> {/* Notes section */}
{preview.note_count > 0 ? (

{t('notebooks.deleteNotebookNotes').replace( '{count}', String(preview.note_count) )}

) : (

{t('notebooks.deleteNotebookNoNotes')}

)}
{/* Shared sources - always above the line */} {preview.shared_source_count > 0 && (

{t('notebooks.deleteNotebookSharedSources').replace( '{count}', String(preview.shared_source_count) )}

)} {/* No sources message */} {preview.exclusive_source_count === 0 && preview.shared_source_count === 0 && (

{t('notebooks.deleteNotebookNoSources')}

)} {/* Exclusive sources section - below the line with radio buttons */} {preview.exclusive_source_count > 0 && (

{t('notebooks.deleteNotebookExclusiveSources').replace( '{count}', String(preview.exclusive_source_count) )}

setSourceAction(value as 'keep' | 'delete')} disabled={isDeleting} >
)} ) : null}
{t('common.cancel')} {isDeleting ? ( <> {t('common.deleting')} ) : ( t('common.delete') )}
) }