"use client" import { useCallback, useEffect, useState } from "react" import { toast } from "sonner" import { ProjectDialog } from "@/components/project-dialog" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { fetchAIWorkflowVersions, restoreAIWorkflowVersion, type AIWorkflow, type AIWorkflowVersion, } from "@/lib/api/admin" import { formatDateTime } from "@/lib/utils" export function WorkflowVersionsDialog({ workflow, open, onOpenChange, onRestored, }: { workflow: AIWorkflow | null open: boolean onOpenChange: (open: boolean) => void onRestored: () => void }) { const [versions, setVersions] = useState([]) const [loading, setLoading] = useState(false) const [restoringId, setRestoringId] = useState(null) const load = useCallback(async () => { if (!workflow || !open) return setLoading(true) try { const page = await fetchAIWorkflowVersions({ workflowId: workflow.id, limit: 50, }) setVersions(page.results ?? []) } catch (error) { toast.error(error instanceof Error ? error.message : "加载版本历史失败") } finally { setLoading(false) } }, [open, workflow]) useEffect(() => { void load() }, [load]) async function restore(version: AIWorkflowVersion) { if (!workflow || restoringId !== null) return setRestoringId(version.id) try { await restoreAIWorkflowVersion(workflow.id, version.id) onRestored() toast.success(`已将 v${version.version} 恢复为草稿`) } catch (error) { toast.error(error instanceof Error ? error.message : "恢复失败") } finally { setRestoringId(null) } } return ( {loading ? (
正在加载版本历史…
) : versions.length ? (
{versions.map((version) => (
v{version.version}
{formatDateTime(version.publishedAt || version.createdAt)}
发布人:{version.publishedByName || "-"}
))}
) : (
尚未发布版本
)}
) }