import { useState, useCallback, useEffect } from 'react' import Button from '@/components/ui/Button' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, DialogFooter } from '@/components/ui/Dialog' import Input from '@/components/ui/Input' import Checkbox from '@/components/ui/Checkbox' import { toast } from 'sonner' import { errorMessage } from '@/lib/utils' import { clearDocuments, clearCache } from '@/api/lightrag' import { EraserIcon, AlertTriangleIcon } from 'lucide-react' import { useTranslation } from 'react-i18next' // 简单的Label组件 const Label = ({ htmlFor, className, children, ...props }: React.LabelHTMLAttributes) => ( ) interface ClearDocumentsDialogProps { onDocumentsCleared?: () => Promise } export default function ClearDocumentsDialog({ onDocumentsCleared }: ClearDocumentsDialogProps) { const { t } = useTranslation() const [open, setOpen] = useState(false) const [confirmText, setConfirmText] = useState('') const [clearCacheOption, setClearCacheOption] = useState(false) const isConfirmEnabled = confirmText.toLowerCase() === 'yes' // 重置状态当对话框关闭时 useEffect(() => { if (!open) { setConfirmText('') setClearCacheOption(false) } }, [open]) const handleClear = useCallback(async () => { if (!isConfirmEnabled) return try { const result = await clearDocuments() if (result.status !== 'success') { toast.error(t('documentPanel.clearDocuments.failed', { message: result.message })) setConfirmText('') return } toast.success(t('documentPanel.clearDocuments.success')) if (clearCacheOption) { try { await clearCache() toast.success(t('documentPanel.clearDocuments.cacheCleared')) } catch (cacheErr) { toast.error(t('documentPanel.clearDocuments.cacheClearFailed', { error: errorMessage(cacheErr) })) } } // Refresh document list if provided if (onDocumentsCleared) { onDocumentsCleared().catch(console.error) } // 所有操作成功后关闭对话框 setOpen(false) } catch (err) { toast.error(t('documentPanel.clearDocuments.error', { error: errorMessage(err) })) setConfirmText('') } }, [isConfirmEnabled, clearCacheOption, setOpen, t, onDocumentsCleared]) return ( e.preventDefault()}> {t('documentPanel.clearDocuments.title')} {t('documentPanel.clearDocuments.description')}
{t('documentPanel.clearDocuments.warning')}
{t('documentPanel.clearDocuments.confirm')}
) => setConfirmText(e.target.value)} placeholder={t('documentPanel.clearDocuments.confirmPlaceholder')} className="w-full" />
setClearCacheOption(checked === true)} />
) }