'use client'; import { useQuery } from '@tanstack/react-query'; import { Copy, Loader2 } from 'lucide-react'; import { toast } from 'sonner'; import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { EmptyStateWithBorder } from '@/components/layout/empty'; import { ErrorInline } from '@/components/layout/error'; import { LoadingStateWithBorder } from '@/components/layout/loading'; import { TlsCertificateService } from '@/lib/services/openflare'; import { formatDateTime } from '@/lib/utils'; import { useTranslations } from 'next-intl'; import { WebsiteStatusBadge } from './status-badge'; import { getCertificateStatus, getErrorMessage } from './website-utils'; interface CertificateDetailDialogProps { certificateId: number | null; open: boolean; onOpenChange: (open: boolean) => void; onEdit: () => void; onDelete: () => void; deleting?: boolean; } export function CertificateDetailDialog({ certificateId, open, onOpenChange, onEdit, onDelete, deleting = false, }: CertificateDetailDialogProps) { const t = useTranslations('certificates'); const certificateQuery = useQuery({ queryKey: ['openflare', 'tls-certificates', 'detail', certificateId], queryFn: () => TlsCertificateService.getById(certificateId as number), enabled: open && certificateId !== null, }); const contentQuery = useQuery({ queryKey: ['openflare', 'tls-certificates', 'content', certificateId], queryFn: () => TlsCertificateService.getContent(certificateId as number), enabled: open && certificateId !== null, }); const certificate = certificateQuery.data; const content = contentQuery.data; const status = certificate ? getCertificateStatus(certificate, t) : null; const loading = certificateQuery.isLoading || contentQuery.isLoading; const hasError = certificateQuery.isError || contentQuery.isError; const handleCopy = async (value: string, message: string) => { try { await navigator.clipboard.writeText(value); toast.success(message); } catch (error) { toast.error(getErrorMessage(error, t('requestFailed'))); } }; return ( {t('detailTitle')} {t('detailDesc')} {loading ? ( ) : hasError ? ( ) : !certificate || !content ? ( ) : (

{t('name')}

{certificate.name}

{t('status')}

{status ? ( ) : null}

{t('notBefore')}

{formatDateTime(certificate.not_before)}

{t('notAfter')}

{formatDateTime(certificate.not_after)}

{t('remark')}

{certificate.remark || t('noRemark')}

{t('certPem')}

                  {content.cert_pem}
                

{t('keyPem')}

                  {content.key_pem}
                
)}
); }