From 7bd66fbaf0e173e393a226d3475e72d13a57f43c Mon Sep 17 00:00:00 2001 From: CC Worker Date: Mon, 8 Jun 2026 19:19:15 +0000 Subject: [PATCH] fix(exam): stop placeholder guide shapes flashing before template loads seedGuide() ran in onMount via the 'else' branch while template was still null during the async fetch, creating 5 example shapes (Q1 start/end, part, response, context) that flashed on screen until the real template + PDF loaded. Only seed the guide for a genuinely-empty template after load. Co-Authored-By: Claude Opus 4.8 --- src/pages/exam/setup/ExamTemplateSetupPage.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pages/exam/setup/ExamTemplateSetupPage.tsx b/src/pages/exam/setup/ExamTemplateSetupPage.tsx index 6d35589..c57acfc 100644 --- a/src/pages/exam/setup/ExamTemplateSetupPage.tsx +++ b/src/pages/exam/setup/ExamTemplateSetupPage.tsx @@ -211,7 +211,9 @@ const ExamTemplateSetupInner: React.FC = () => { setTemplate(detail) const editor = editorRef.current if (editor) { - loadShapes(editor, shapesFromTemplate(detail, pageGeometriesRef.current)) + const shapes = shapesFromTemplate(detail, pageGeometriesRef.current) + loadShapes(editor, shapes) + if (!shapes.length) seedGuide(editor) bringDomainShapesToFront(editor) } setDirty(false) @@ -417,7 +419,14 @@ const ExamTemplateSetupInner: React.FC = () => { editor.store.listen(() => setDirty(true), { scope: 'document' }) applyDocViewConstraints(editor, []) editor.resetZoom() - if (template) loadShapes(editor, shapesFromTemplate(template, pageGeometriesRef.current)); else seedGuide(editor) + // Only seed the example guide for a genuinely-empty template AFTER it has loaded. + // (Previously `else seedGuide` fired on mount while `template` was still null during + // the async fetch, flashing placeholder shapes before the real shapes/PDF rendered.) + if (template) { + const s = shapesFromTemplate(template, pageGeometriesRef.current) + loadShapes(editor, s) + if (!s.length) seedGuide(editor) + } bringDomainShapesToFront(editor) }} />