From 8299c9da49760097a8ea8c04e9a04452d6ae41da Mon Sep 17 00:00:00 2001 From: Aadesh Kheria Date: Wed, 6 May 2026 13:54:11 -0700 Subject: [PATCH 1/2] initial commit --- .../dashboards/[dashboardId]/page-client.tsx | 2 +- .../dashboard-sandbox-host.tsx | 119 ++++++++++++++---- 2 files changed, 96 insertions(+), 25 deletions(-) diff --git a/apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/dashboards/[dashboardId]/page-client.tsx b/apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/dashboards/[dashboardId]/page-client.tsx index 17ad8f25bb..333fc15fac 100644 --- a/apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/dashboards/[dashboardId]/page-client.tsx +++ b/apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/dashboards/[dashboardId]/page-client.tsx @@ -391,7 +391,7 @@ function DashboardDetailContent({ {/* Both panels are always in the DOM so the iframe never unmounts/reloads. The chat panel animates its width; the dashboard panel adjusts via flex-1. */} -
+
{/* Dashboard iframe panel */}
((result, str, i) => result + str + (values[i] ?? ''), ''); } - const isDev = process.env.NODE_ENV === "development"; +function getEsmFallbackVersion(version: string): string { + const parts = version.split("."); + const [major, minor, patchString] = parts; + const patch = Number(patchString); + return `${major}.${minor}.${patch - 1}`; +} + function getDependencyScripts(esmVersion: string, esmFallbackVersion: string, dashboardUrl: string): string { if (isDev) { return html` `; @@ -72,6 +98,30 @@ function getDependencyScripts(esmVersion: string, esmFallbackVersion: string, da return html` `; } @@ -118,7 +174,7 @@ function getSandboxDocument(artifact: DashboardArtifact, baseUrl: string, dashbo const sourceCode = escapeScriptContent(artifact.runtimeCodegen.uiRuntimeSourceCode); const darkClass = initialTheme === "dark" ? "dark" : ""; const esmVersion = packageJson.version; - const esmFallbackVersion = "2.8.71"; + const esmFallbackVersion = getEsmFallbackVersion(esmVersion); const devScriptSrc = isDev ? ` ${dashboardUrl}` : ''; const devConnectSrc = isDev ? ` ${dashboardUrl}` : ''; @@ -307,10 +363,18 @@ function getSandboxDocument(artifact: DashboardArtifact, baseUrl: string, dashbo }; async function waitForDeps() { - if (window.__depsReady) return; - await new Promise(resolve => { - window.addEventListener('deps-ready', resolve, { once: true }); - }); + if (!window.__depsReady) { + await new Promise(resolve => { + window.addEventListener('deps-ready', resolve, { once: true }); + }); + } + if (window.__depsError) { + const error = new Error(window.__depsError.message || 'There was a problem loading custom dashboards. Please refresh the page and try again.'); + if (window.__depsError.stack) { + error.stack = window.__depsError.stack; + } + throw error; + } } async function requestAccessToken() { @@ -735,6 +799,13 @@ export const DashboardSandboxHost = memo(function DashboardSandboxHost({ return; } + if (type === "dashboard-sandbox-dependency-error") { + const err = new Error(event.data.message ?? 'Unknown custom dashboard dependency error'); + if (event.data.stack) err.stack = event.data.stack; + captureError('dashboard-sandbox-dependency-error', err); + return; + } + if (type === "dashboard-error-boundary") { const err = new Error(event.data.message ?? 'Unknown dashboard error'); if (event.data.stack) err.stack = event.data.stack; From ec9ad36bf5d78361c1ba721d905990bc8ea71e81 Mon Sep 17 00:00:00 2001 From: Aadesh Kheria Date: Wed, 6 May 2026 15:18:41 -0700 Subject: [PATCH 2/2] Enhance version fallback logic in dashboard sandbox host --- .../commands/create-dashboard/dashboard-sandbox-host.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/dashboard/src/components/commands/create-dashboard/dashboard-sandbox-host.tsx b/apps/dashboard/src/components/commands/create-dashboard/dashboard-sandbox-host.tsx index f538d69252..f2312cbdb6 100644 --- a/apps/dashboard/src/components/commands/create-dashboard/dashboard-sandbox-host.tsx +++ b/apps/dashboard/src/components/commands/create-dashboard/dashboard-sandbox-host.tsx @@ -22,9 +22,10 @@ const isDev = process.env.NODE_ENV === "development"; function getEsmFallbackVersion(version: string): string { const parts = version.split("."); - const [major, minor, patchString] = parts; - const patch = Number(patchString); - return `${major}.${minor}.${patch - 1}`; + if (parts.length !== 3) return version; + const patch = Number(parts[2]); + if (!Number.isInteger(patch) || patch <= 0) return version; + return `${parts[0]}.${parts[1]}.${patch - 1}`; } function getDependencyScripts(esmVersion: string, esmFallbackVersion: string, dashboardUrl: string): string {