import { Progress, Tag, Tooltip } from "antd"; import type { ITaskData, ITaskResponse, TTaskStatus } from "../../api/task"; import { useIntl } from "react-intl"; import { useEffect, useState } from "react"; import { get } from "../../request"; const taskStatusColors: Record = { pending: "default", published: "orange", running: "processing", done: "success", restarted: "warning", requested_restart: "warning", closed: "error", canceled: "error", expired: "error", queue: "default", stop: "error", quit: "error", pause: "warning", }; export const TaskStatusColor = (status: TTaskStatus = "pending"): string => { return taskStatusColors[status]; }; interface IWidget { task?: ITaskData; } const TaskStatus = ({ task }: IWidget) => { const intl = useIntl(); const [progress, setProgress] = useState(task?.progress); useEffect(() => { if (!task?.id) { return; } if (task.status !== "running") { return; } const query = () => { const url = `/v2/task/${task?.id}`; console.info("api request", url); get(url).then((json) => { console.log("api response", json); if (json.ok) { setProgress(json.data.progress); } }); }; const timer = setInterval(query, 1000 * (60 + Math.random() * 10)); return () => { clearInterval(timer); }; }, [task]); const color = TaskStatusColor(task?.status); return ( <> {intl.formatMessage({ id: `labels.task.status.${task?.status}`, defaultMessage: "unknown", })} {task?.status === "running" && task?.executor?.roles?.includes("ai") ? (
) : ( <> )} ); }; export default TaskStatus;