From 7b822a787a7a681522f8cf4d4fe0b252169454cb Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Thu, 9 Apr 2026 07:41:11 +0200 Subject: [PATCH] feat: show Redeploy button when config changed after deployment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Compare app.updatedAt with deployment.deployedAt — if config was modified after the deployment started, show a primary "Redeploy" button in the Actions column. Also show a toast hint after saving config: "Redeploy to apply changes to running deployments." Co-Authored-By: Claude Opus 4.6 (1M context) --- ui/src/pages/AppsTab/AppsTab.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/src/pages/AppsTab/AppsTab.tsx b/ui/src/pages/AppsTab/AppsTab.tsx index 320f768d..94e62985 100644 --- a/ui/src/pages/AppsTab/AppsTab.tsx +++ b/ui/src/pages/AppsTab/AppsTab.tsx @@ -617,6 +617,7 @@ function OverviewSubTab({ app, deployments, versions, environments, envMap, sele const isSelectedEnv = !selectedEnvId || d.environmentId === selectedEnvId; const canAct = isSelectedEnv && (d.status === 'RUNNING' || d.status === 'STARTING'); const canStart = isSelectedEnv && d.status === 'STOPPED'; + const configChanged = canAct && d.deployedAt && new Date(app.updatedAt) > new Date(d.deployedAt); const url = dEnv ? `/${dEnv.slug}/${app.slug}/` : ''; return ( @@ -641,7 +642,8 @@ function OverviewSubTab({ app, deployments, versions, environments, envMap, sele )} {d.deployedAt ? timeAgo(d.deployedAt) : '—'} - + + {configChanged && } {canAct && } {canStart && } {!isSelectedEnv && switch env to manage} @@ -820,7 +822,7 @@ function ConfigSubTab({ app, environment }: { app: App; environment?: Environmen }; try { await updateContainerConfig.mutateAsync({ appId: app.slug, config: containerConfig }); - toast({ title: 'Configuration saved', variant: 'success' }); + toast({ title: 'Configuration saved', description: 'Redeploy to apply changes to running deployments.', variant: 'success' }); setEditing(false); } catch { toast({ title: 'Failed to save container config', variant: 'error', duration: 86_400_000 }); } }