diff --git a/src/components/preview_panel/PreviewIframe.tsx b/src/components/preview_panel/PreviewIframe.tsx index f56def7..ca7815d 100644 --- a/src/components/preview_panel/PreviewIframe.tsx +++ b/src/components/preview_panel/PreviewIframe.tsx @@ -35,7 +35,7 @@ import { showError } from "@/lib/toast"; import { SandboxConfig } from "@/ipc/ipc_types"; interface ErrorBannerProps { - error: string | null; + error: string | undefined; onDismiss: () => void; onAIFix: () => void; } @@ -44,11 +44,11 @@ const ErrorBanner = ({ error, onDismiss, onAIFix }: ErrorBannerProps) => { if (!error) return null; return ( -
+
{/* Close button in top left */} @@ -60,11 +60,11 @@ const ErrorBanner = ({ error, onDismiss, onAIFix }: ErrorBannerProps) => { {/* Tip message */}
-
+
- + Tip: Check if refreshing the page or restarting the app fixes the error. @@ -88,10 +88,10 @@ const ErrorBanner = ({ error, onDismiss, onAIFix }: ErrorBannerProps) => { // Preview iframe component export const PreviewIframe = ({ loading, - error, + loadingErrorMessage, }: { loading: boolean; - error: Error | null; + loadingErrorMessage: string | undefined; }) => { const selectedAppId = useAtomValue(selectedAppIdAtom); const { appUrl } = useAtomValue(appUrlAtom); @@ -100,8 +100,9 @@ export const PreviewIframe = ({ // State to trigger iframe reload const [reloadKey, setReloadKey] = useState(0); - const [iframeError, setIframeError] = useState(null); - const [showError, setShowError] = useState(true); + const [errorMessage, setErrorMessage] = useState( + loadingErrorMessage + ); const setInputValue = useSetAtom(chatInputValueAtom); const [availableRoutes, setAvailableRoutes] = useState< Array<{ path: string; label: string }> @@ -171,7 +172,7 @@ export const PreviewIframe = ({ if (type === "window-error") { const errorMessage = `Error in ${payload.filename} (line ${payload.lineno}, col ${payload.colno}): ${payload.message}`; console.error("Iframe error:", errorMessage); - setIframeError(errorMessage); + setErrorMessage(errorMessage); setAppOutput((prev) => [ ...prev, { @@ -183,7 +184,7 @@ export const PreviewIframe = ({ } else if (type === "unhandled-rejection") { const errorMessage = `Unhandled Promise Rejection: ${payload.reason}`; console.error("Iframe unhandled rejection:", errorMessage); - setIframeError(errorMessage); + setErrorMessage(errorMessage); setAppOutput((prev) => [ ...prev, { @@ -412,10 +413,10 @@ export const PreviewIframe = ({
setShowError(false)} + error={errorMessage} + onDismiss={() => setErrorMessage(undefined)} onAIFix={() => { - setInputValue(`Fix the error in ${error?.message || iframeError}`); + setInputValue(`Fix the error in ${errorMessage}`); }} /> diff --git a/src/components/preview_panel/PreviewPanel.tsx b/src/components/preview_panel/PreviewPanel.tsx index 90980c5..61c5bae 100644 --- a/src/components/preview_panel/PreviewPanel.tsx +++ b/src/components/preview_panel/PreviewPanel.tsx @@ -162,7 +162,10 @@ export function PreviewPanel() {
{previewMode === "preview" ? ( - + ) : ( )}