diff --git a/src/pages/launcher/LauncherBuildPage.tsx b/src/pages/launcher/LauncherBuildPage.tsx index 72abfb8..38e4b6d 100644 --- a/src/pages/launcher/LauncherBuildPage.tsx +++ b/src/pages/launcher/LauncherBuildPage.tsx @@ -89,6 +89,7 @@ export function LauncherBuildPage() { const currentPage = Math.min(page, totalPages); const pageStart = (currentPage - 1) * launcherBuildJobPageSize; const pagedJobs = sortedJobs.slice(pageStart, pageStart + launcherBuildJobPageSize); + const hasActiveJob = jobs.some((job) => job.status === 'PENDING' || job.status === 'RUNNING'); const refresh = () => { setLoading(true); @@ -111,6 +112,26 @@ export function LauncherBuildPage() { refresh(); }, []); + useEffect(() => { + if (!hasActiveJob) return; + const timer = window.setInterval(() => { + listLauncherBuildJobs() + .then((nextJobs) => setJobs(nextJobs)) + .catch((error: Error) => { + toast({ type: 'error', title: '빌드 작업 갱신 실패', message: error.message }); + }); + }, 2000); + return () => window.clearInterval(timer); + }, [hasActiveJob, toast]); + + useEffect(() => { + if (!selectedJob) return; + const nextSelectedJob = jobs.find((job) => job.id === selectedJob.id); + if (nextSelectedJob && nextSelectedJob !== selectedJob) { + setSelectedJob(nextSelectedJob); + } + }, [jobs, selectedJob]); + const createJob = () => { setLoading(true); createLauncherBuildJob({