From 6cba932146a190c3b206af0b34b564d19f95615c Mon Sep 17 00:00:00 2001 From: CC Worker Date: Mon, 1 Jun 2026 06:13:49 +0000 Subject: [PATCH] =?UTF-8?q?fix(canvas):=20move=20ensureStoreIsUsable()=20t?= =?UTF-8?q?o=20AFTER=20snapshot=20load=20=E2=80=94=20loadSnapshot()=20over?= =?UTF-8?q?writes=20TLINSTANCE=20before=20it=20could=20be=20pre-initialize?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/tldraw/singlePlayerPage.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pages/tldraw/singlePlayerPage.tsx b/src/pages/tldraw/singlePlayerPage.tsx index 688963b..647763d 100644 --- a/src/pages/tldraw/singlePlayerPage.tsx +++ b/src/pages/tldraw/singlePlayerPage.tsx @@ -98,9 +98,6 @@ export default function SinglePlayerPage() { shapeUtils: allShapeUtils, bindingUtils: allBindingUtils }); - // Pre-initialize tldraw's required records (TLINSTANCE, page, cameras) - // so computed signals that read currentPageId don't crash before Editor construction completes - (newStore as unknown as { ensureStoreIsUsable(): void }).ensureStoreIsUsable(); const snapSvc = new NavigationSnapshotService(newStore, editorRef.current || undefined); if (accessToken) snapSvc.setAccessToken(accessToken); @@ -127,6 +124,10 @@ export default function SinglePlayerPage() { return; } + // After snapshot loading (which may overwrite or clear store records), + // ensure TLINSTANCE + page + cameras exist so tldraw never crashes on empty/corrupt store + (newStore as unknown as { ensureStoreIsUsable(): void }).ensureStoreIsUsable(); + let debounce: ReturnType | null = null; newStore.listen(() => { if (!snapshotServiceRef.current?.getCurrentNodePath()) return;