"use client" import { Button } from "@/components/ui/button" import { Sheet, SheetContent, SheetHeader, SheetTitle } from "@/components/ui/sheet" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { useI18n } from "@/i18n/provider" import { exportKnowledgeFAQs, fetchKnowledgeBase, type KnowledgeBase } from "@/lib/api/admin" import { ArrowLeftIcon, BugIcon, DownloadIcon, FileTextIcon, LayoutGridIcon, LayoutListIcon, PlusIcon, RefreshCwIcon, UploadIcon, } from "lucide-react" import { useRouter, useSearchParams } from "next/navigation" import { useCallback, useEffect, useState } from "react" import { toast } from "sonner" import { DebugPanel } from "../_components/debug-panel" import { DocumentList, type DocumentListActionState } from "../_components/document-list" import { FAQList, type FAQListActionState } from "../_components/faq-list" import { RetrieveLogList } from "../_components/retrieve-log-list" export default function KnowledgeBaseDetailPage() { const t = useI18n() const router = useRouter() const searchParams = useSearchParams() const knowledgeBaseId = Number(searchParams.get("id")) const [knowledgeBase, setKnowledgeBase] = useState(null) const [loading, setLoading] = useState(true) const [activeTab, setActiveTab] = useState("documents") const [debugPanelOpen, setDebugPanelOpen] = useState(false) const [documentActionState, setDocumentActionState] = useState(null) const [faqActionState, setFAQActionState] = useState(null) const [exportingFAQ, setExportingFAQ] = useState(false) const loadKnowledgeBase = useCallback(async () => { if (!Number.isInteger(knowledgeBaseId) || knowledgeBaseId <= 0) { setKnowledgeBase(null) setLoading(false) return } setLoading(true) try { setKnowledgeBase(await fetchKnowledgeBase(knowledgeBaseId)) } catch (error) { setKnowledgeBase(null) toast.error(error instanceof Error ? error.message : t("knowledge.loadBaseFailed")) } finally { setLoading(false) } }, [knowledgeBaseId, t]) useEffect(() => { void loadKnowledgeBase() }, [loadKnowledgeBase]) async function handleExportFAQ() { if (!knowledgeBase || exportingFAQ) { return } setExportingFAQ(true) try { await exportKnowledgeFAQs(knowledgeBase.id) toast.success(t("knowledge.exportFAQSuccess")) } catch (error) { toast.error(error instanceof Error ? error.message : t("knowledge.exportFAQFailed")) } finally { setExportingFAQ(false) } } if (!loading && !knowledgeBase) { return (

{t("knowledge.baseNotFound")}

) } const isFAQKnowledgeBase = knowledgeBase?.knowledgeType === "faq" return (

{knowledgeBase?.name ?? t("knowledge.title")}

{knowledgeBase?.description ? ( <>
{activeTab === "documents" && !isFAQKnowledgeBase && documentActionState ? (
) : null} {activeTab === "documents" && isFAQKnowledgeBase && faqActionState ? (
) : null} {isFAQKnowledgeBase ? t("knowledge.faq") : t("knowledge.document")} {t("knowledge.retrieveLogs")}
{isFAQKnowledgeBase ? : }
{t("knowledge.ragDebug")}
) }