From b93d885ad1ab3100d72187d8e083280f57216f03 Mon Sep 17 00:00:00 2001
From: Nyk <0xnykcd@googlemail.com>
Date: Thu, 5 Mar 2026 19:26:43 +0700
Subject: [PATCH] fix(workspaces): unblock pending tenant bootstrap flow
---
src/components/panels/super-admin-panel.tsx | 32 +++++++++++++++++++--
src/lib/super-admin.ts | 11 +++++--
2 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/src/components/panels/super-admin-panel.tsx b/src/components/panels/super-admin-panel.tsx
index c2ffd10..73f9e3b 100644
--- a/src/components/panels/super-admin-panel.tsx
+++ b/src/components/panels/super-admin-panel.tsx
@@ -395,6 +395,34 @@ export function SuperAdminPanel() {
}
}
+ const approveAndRunJob = async (jobId: number) => {
+ setBusyJobId(jobId)
+ try {
+ const approveRes = await fetch(`/api/super/provision-jobs/${jobId}`, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ action: 'approve' }),
+ })
+ const approveJson = await approveRes.json().catch(() => ({}))
+ if (!approveRes.ok) throw new Error(approveJson?.error || `Failed to approve job #${jobId}`)
+
+ const runRes = await fetch(`/api/super/provision-jobs/${jobId}/run`, { method: 'POST' })
+ const runJson = await runRes.json().catch(() => ({}))
+ if (!runRes.ok) throw new Error(runJson?.error || `Failed to run job #${jobId}`)
+
+ showFeedback(true, `Job #${jobId} approved and executed`)
+ await load()
+ await loadJobDetail(jobId)
+ } catch (e: any) {
+ showFeedback(false, e?.message || `Failed to approve/run job #${jobId}`)
+ await load()
+ await loadJobDetail(jobId)
+ } finally {
+ setBusyJobId(null)
+ setOpenActionMenu(null)
+ }
+ }
+
const openDecommissionDialog = (tenant: TenantRow) => {
setOpenActionMenu(null)
setDecommissionDialog({
@@ -884,11 +912,11 @@ export function SuperAdminPanel() {
View events