"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 (
<>
>
);
}