'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}
); }