"use client"; import { useEffect, useState } from "react"; import { ProjectDialog } from "@/components/project-dialog"; import { SafeRichHTML } from "@/components/safe-rich-html"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { fetchKnowledgeDocument, fetchKnowledgeFAQ, type KnowledgeDocument, type KnowledgeFAQ, } from "@/lib/api/admin"; import { markdownToHtml } from "@/components/content-editor/convert"; import { KnowledgeDocumentContentType } from "@/lib/generated/enums"; import { useI18n } from "@/i18n/provider"; import { formatDateTime } from "@/lib/utils"; type KnowledgeContentDetailDialogProps = { open: boolean; type: "document" | "faq"; itemId: number | null; onOpenChange: (open: boolean) => void; }; type DetailFieldProps = { label: string; value: string; }; function DetailField({ label, value }: DetailFieldProps) { return (
{label}
{value || "-"}
); } function getDirectoryLabel(item: KnowledgeDocument | KnowledgeFAQ, rootLabel: string) { return item.directoryPath || item.directoryName || (item.directoryId === 0 ? rootLabel : "-"); } function renderDocumentContent(item: KnowledgeDocument) { if (item.contentType === KnowledgeDocumentContentType.Markdown) { return markdownToHtml(item.content || ""); } return item.content || ""; } export function KnowledgeContentDetailDialog({ open, type, itemId, onOpenChange, }: KnowledgeContentDetailDialogProps) { const t = useI18n(); const [loading, setLoading] = useState(false); const [documentDetail, setDocumentDetail] = useState(null); const [faqDetail, setFAQDetail] = useState(null); useEffect(() => { if (!open || !itemId) { return; } const id = itemId; let cancelled = false; async function loadDetail() { setLoading(true); try { if (type === "document") { const data = await fetchKnowledgeDocument(id); if (!cancelled) { setDocumentDetail(data); setFAQDetail(null); } return; } const data = await fetchKnowledgeFAQ(id); if (!cancelled) { setFAQDetail(data); setDocumentDetail(null); } } finally { if (!cancelled) { setLoading(false); } } } void loadDetail(); return () => { cancelled = true; }; }, [itemId, open, type]); const item = type === "document" ? documentDetail : faqDetail; const title = type === "document" ? documentDetail?.title || t("knowledge.viewDocumentTitle") : faqDetail?.question || t("knowledge.viewFAQTitle"); return ( onOpenChange(false)}> {t("common.close")} } > {loading || !item ? (
{t("knowledge.loading")}
) : (
{t("knowledge.status")}
{item.statusName || item.status}
{t("knowledge.indexStatus")}
{item.indexStatusName || item.indexStatus}
{item.indexError ? (
{item.indexError}
) : null} {type === "document" && documentDetail ? (
{t("knowledge.content")}
{documentDetail.contentType || "-"}
) : null} {type === "faq" && faqDetail ? (
{t("knowledge.standardQuestion")}
{faqDetail.question}
{t("knowledge.answer")}
                  {faqDetail.answer || "-"}
                
{faqDetail.similarQuestions.length > 0 ? (
{t("knowledge.similarQuestions")}
{faqDetail.similarQuestions.map((question) => ( {question} ))}
) : null} {faqDetail.remark ? (
{t("knowledge.remark")}
{faqDetail.remark}
) : null}
) : null}
)}
); }