"use client" import {useEffect, useState} from "react" import {Loader2} from "lucide-react" import {toast} from "sonner" import {Badge} from "@/components/ui/badge" import {Button} from "@/components/ui/button" import {CodeBlock} from "@/components/ui/code-block" import {Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle,} from "@/components/ui/sheet" import {type ConfigVersionDetail, ConfigVersionService, type ConfigVersionSummary,} from "@/lib/services/openflare" import {formatDateTime} from "@/lib/utils" interface VersionSnapshotSheetProps { version: ConfigVersionSummary | null open: boolean onOpenChange: (open: boolean) => void } export function VersionSnapshotSheet({ version, open, onOpenChange, }: VersionSnapshotSheetProps) { const [detail, setDetail] = useState(null) const [loading, setLoading] = useState(false) useEffect(() => { if (!open || !version) { setDetail(null) return } let cancelled = false setLoading(true) ConfigVersionService.getById(version.id) .then((data) => { if (!cancelled) setDetail(data) }) .catch((err) => { if (!cancelled) { toast.error("加载版本快照失败", { description: err instanceof Error ? err.message : "未知错误", }) } }) .finally(() => { if (!cancelled) setLoading(false) }) return () => { cancelled = true } }, [open, version]) return ( {version ? `版本 ${version.version}` : "版本快照"} 查看历史配置版本的完整快照内容。
{loading ? (
正在加载快照...
) : detail ? (
{detail.is_active ? ( 当前激活 ) : ( 历史版本 )} {detail.checksum}

创建人

{detail.created_by || "系统"}

创建时间

{formatDateTime(detail.created_at)}

主配置

路由配置

) : null}
) }