"use client"; import { useState } from "react"; import { toast } from "sonner"; import { Square } from "lucide-react"; import { api, ApiError } from "@/components/api"; import { ConfirmDialog } from "@/components/confirm-dialog"; import { Button } from "@/components/ui/button"; interface StopRunButtonProps { runId: number; onStopped?: () => void; } export function StopRunButton({ runId, onStopped }: StopRunButtonProps) { const [open, setOpen] = useState(false); const [loading, setLoading] = useState(false); async function stop() { setLoading(true); try { await api(`/api/runs/${runId}/stop`, { method: "POST" }); toast.success("已发送停止请求"); setOpen(false); onStopped?.(); } catch (e) { if (e instanceof ApiError && e.status === 409) { toast.info("运行已结束"); setOpen(false); onStopped?.(); } else { toast.error(e instanceof Error ? e.message : "停止失败"); } } finally { setLoading(false); } } return ( <> ); }