From af95e7380654b7fa104b95363b431619be6f3ded Mon Sep 17 00:00:00 2001 From: Vadym Samoilenko Date: Sun, 1 Mar 2026 19:35:27 +0000 Subject: [PATCH] Fix SSE crash + React layout error boundaries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - documents_loader: skip missing files (print warning + continue) instead of raising HTTPException inside SSE generator — prevents "response already started" runtime error when temp files are wiped on restart - V1ContentRender: wrap non-edit mode render in SlideErrorBoundary so broken custom layout components show a red placeholder instead of crashing the page (React error #62) - CustomTemplateCard: wrap LayoutPreview in SlideErrorBoundary for the same reason — bad compiled TSX from master deck parsing no longer crashes the outline template picker Co-Authored-By: Claude Sonnet 4.6 --- backend/services/documents_loader.py | 6 ++---- .../components/V1ContentRender.tsx | 12 +++++++----- .../outline/components/CustomTemplateCard.tsx | 5 ++++- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/backend/services/documents_loader.py b/backend/services/documents_loader.py index b3d395a..ffb72a0 100644 --- a/backend/services/documents_loader.py +++ b/backend/services/documents_loader.py @@ -1,5 +1,4 @@ import mimetypes -from fastapi import HTTPException import os, asyncio from typing import List, Optional, Tuple import pdfplumber @@ -44,9 +43,8 @@ class DocumentsLoader: for file_path in self._file_paths: if not os.path.exists(file_path): - raise HTTPException( - status_code=404, detail=f"File {file_path} not found" - ) + print(f"[DocumentsLoader] Warning: file not found, skipping: {file_path}") + continue document = "" imgs = [] diff --git a/frontend/app/(presentation-generator)/components/V1ContentRender.tsx b/frontend/app/(presentation-generator)/components/V1ContentRender.tsx index 1cc867c..db4ec2e 100644 --- a/frontend/app/(presentation-generator)/components/V1ContentRender.tsx +++ b/frontend/app/(presentation-generator)/components/V1ContentRender.tsx @@ -129,11 +129,13 @@ export const V1ContentRender = ({ slide, isEditMode, theme }: { slide: any, isEd ); } return ( - + + + ) }; diff --git a/frontend/app/(presentation-generator)/outline/components/CustomTemplateCard.tsx b/frontend/app/(presentation-generator)/outline/components/CustomTemplateCard.tsx index dbd1c94..5ed3391 100644 --- a/frontend/app/(presentation-generator)/outline/components/CustomTemplateCard.tsx +++ b/frontend/app/(presentation-generator)/outline/components/CustomTemplateCard.tsx @@ -4,6 +4,7 @@ import { Card } from "@/components/ui/card"; import { CustomTemplates, useCustomTemplatePreview } from "@/app/hooks/useCustomTemplates"; import { Loader2 } from "lucide-react"; import { CompiledLayout } from "@/app/hooks/compileLayout"; +import { SlideErrorBoundary } from "../../components/SlideErrorBoundary"; // Memoized preview component to prevent re-renders during scroll export const LayoutPreview = memo(({ layout, templateId, index }: { layout: CompiledLayout, templateId: string, index: number }) => { @@ -19,7 +20,9 @@ export const LayoutPreview = memo(({ layout, templateId, index }: { layout: Comp className="transform scale-[0.2] flex justify-center items-center origin-top-left w-[500%] h-[500%]" style={{ transform: 'scale(0.2) translateZ(0)', backfaceVisibility: 'hidden' }} > - + + + );