diff --git a/ui/src/pages/AppsTab/AppsTab.tsx b/ui/src/pages/AppsTab/AppsTab.tsx index 18aa411e..a08e9973 100644 --- a/ui/src/pages/AppsTab/AppsTab.tsx +++ b/ui/src/pages/AppsTab/AppsTab.tsx @@ -3,6 +3,7 @@ import { useParams, useNavigate } from 'react-router'; import { Badge, Button, + ConfirmDialog, DataTable, Input, Modal, @@ -271,6 +272,7 @@ function AppDetailView({ appId, environments, selectedEnv }: { appId: string; en const deleteApp = useDeleteApp(); const fileInputRef = useRef(null); const [subTab, setSubTab] = useState<'overview' | 'config'>('overview'); + const [deleteConfirm, setDeleteConfirm] = useState(false); const envMap = useMemo(() => new Map(environments.map((e) => [e.id, e])), [environments]); const sortedVersions = useMemo(() => [...versions].sort((a, b) => b.version - a.version), [versions]); @@ -323,7 +325,7 @@ function AppDetailView({ appId, environments, selectedEnv }: { appId: string; en
- +
@@ -342,6 +344,15 @@ function AppDetailView({ appId, environments, selectedEnv }: { appId: string; en {subTab === 'config' && ( )} + + setDeleteConfirm(false)} + onConfirm={handleDelete} + message={`Delete app "${app.displayName}"? All versions and deployments will be removed. This cannot be undone.`} + confirmText={app.slug} + loading={deleteApp.isPending} + /> ); }