From 762cd775392465e7b58974794516c3307d0820c0 Mon Sep 17 00:00:00 2001 From: chyoo Date: Mon, 6 Jul 2026 17:49:55 +0900 Subject: [PATCH] refine deployment and runtime config behavior --- .../applications/DeploymentManagementPage.tsx | 24 +++++++++++++------ src/pages/runtime/RuntimeConfigPage.tsx | 16 ++++++++++--- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/pages/applications/DeploymentManagementPage.tsx b/src/pages/applications/DeploymentManagementPage.tsx index f47d203..4175a63 100644 --- a/src/pages/applications/DeploymentManagementPage.tsx +++ b/src/pages/applications/DeploymentManagementPage.tsx @@ -74,6 +74,16 @@ export function DeploymentManagementPage() { () => releases.filter((release) => !selectedAppId || release.appId === selectedAppId), [releases, selectedAppId] ); + const deployedReleaseIds = useMemo( + () => new Set(deployments + .filter((deployment) => deployment.status === 'SUCCEEDED' && deployment.releaseId) + .map((deployment) => deployment.releaseId!)), + [deployments] + ); + const deployableReleases = useMemo( + () => filteredReleases.filter((release) => !deployedReleaseIds.has(release.id)), + [filteredReleases, deployedReleaseIds] + ); const filteredDeployments = useMemo( () => deployments .filter((deployment) => !selectedAppId || deployment.appId === selectedAppId) @@ -110,11 +120,11 @@ export function DeploymentManagementPage() { }, [selectedRelease?.id]); useEffect(() => { - setReleaseId((prev) => filteredReleases.some((release) => release.id === prev) ? prev : filteredReleases[0]?.id || ''); - setNamespace(filteredReleases[0]?.app?.namespace || ''); - }, [filteredReleases]); + setReleaseId((prev) => deployableReleases.some((release) => release.id === prev) ? prev : deployableReleases[0]?.id || ''); + setNamespace(deployableReleases[0]?.app?.namespace || ''); + }, [deployableReleases]); - const deployableCards = useMemo(() => filteredReleases.slice(0, 8), [filteredReleases]); + const deployableCards = useMemo(() => deployableReleases.slice(0, 8), [deployableReleases]); const openDeployModal = (release?: AppRelease) => { if (release) { @@ -145,7 +155,7 @@ export function DeploymentManagementPage() { title="배포 관리" description="생성된 릴리즈를 운영 환경에 배포하고 재배포와 롤백을 관리합니다." actions={ - @@ -236,7 +246,7 @@ export function DeploymentManagementPage() { - +
{deployableCards.length === 0 ? (
@@ -269,7 +279,7 @@ export function DeploymentManagementPage() { setNamespace(release?.app.namespace || ''); }}> - {filteredReleases.map((release) => )} + {deployableReleases.map((release) => )} setNamespace(event.target.value)} placeholder="stdo-lms" />