import { useEffect, useState } from "react"; import { Link, useParams } from "react-router-dom"; import { fetchBuild, statusLabel, type Build } from "../api"; export default function JobStatus() { const { id } = useParams<{ id: string }>(); const [build, setBuild] = useState(null); const [error, setError] = useState(null); useEffect(() => { if (!id) return; let cancelled = false; async function poll() { try { const data = await fetchBuild(id!); if (cancelled) return; setBuild(data); setError(null); if (data.status === "completed" || data.status === "failed") { return; } window.setTimeout(poll, 5000); } catch (err) { if (cancelled) return; setError(err instanceof Error ? err.message : "加载失败"); window.setTimeout(poll, 5000); } } poll(); return () => { cancelled = true; }; }, [id]); if (!id) { return

缺少任务 ID

; } return (

构建任务

返回上传
{error ?

{error}

: null} {build ? ( <>
任务 ID
{build.id}
应用中文名
{build.appName}
应用英文名
{build.appNameEn}
Bundle ID
{build.appIdentifier}
状态
{statusLabel(build.status)}
{build.status === "completed" ? (

下载安装包

{build.windowsUrl ? ( 下载 Windows 版 ) : ( Windows 安装包尚未就绪 )} {build.androidUrl ? ( 下载 Android 版 ) : ( Android 安装包尚未就绪 )}
) : null} {build.status === "failed" ? (

{build.error ?? "构建失败,请查看 GitHub Actions 日志。"}

{build.actionsUrl ? ( 查看 Actions 日志 ) : null}
) : null} {build.status !== "completed" && build.status !== "failed" ? (

正在轮询 GitHub Actions 状态,请稍候...

) : null} ) : (

加载任务信息...

)}
); }