From 000b74af9fda3922676a596f861f374f9e26add7 Mon Sep 17 00:00:00 2001 From: Till JS Date: Tue, 24 Mar 2026 12:15:35 +0100 Subject: [PATCH] fix(web): add appReady gate to prevent auth race condition in all apps In Svelte, child onMount fires before parent onMount. Pages that fetch data in onMount race against the layout's authStore.initialize(). Added appReady state gate to layouts so children don't mount until auth is confirmed. Affects: todo, contacts, clock, photos, zitare, planta. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../apps/web/src/routes/(app)/+layout.svelte | 116 +++---- .../apps/web/src/routes/(app)/+layout.svelte | 222 ++++++------- .../apps/web/src/routes/(app)/+layout.svelte | 90 +++--- .../apps/web/src/routes/(app)/+layout.svelte | 13 +- .../apps/web/src/routes/(app)/+layout.svelte | 292 +++++++++--------- .../apps/web/src/routes/(app)/+page.svelte | 6 - .../apps/web/src/routes/(app)/+layout.svelte | 191 ++++++------ 7 files changed, 498 insertions(+), 432 deletions(-) diff --git a/apps/clock/apps/web/src/routes/(app)/+layout.svelte b/apps/clock/apps/web/src/routes/(app)/+layout.svelte index 63b32a2c0..6bd2fce33 100644 --- a/apps/clock/apps/web/src/routes/(app)/+layout.svelte +++ b/apps/clock/apps/web/src/routes/(app)/+layout.svelte @@ -38,6 +38,9 @@ let { children } = $props(); + // Auth gate - prevent children from mounting before auth is confirmed + let appReady = $state(false); + // CommandBar state let commandBarOpen = $state(false); @@ -262,66 +265,75 @@ if (currentPath === '/' && userSettings.startPage && userSettings.startPage !== '/') { goto(userSettings.startPage, { replaceState: true }); } + + // Auth confirmed - allow children to render + appReady = true; }); -
- +{#if !appReady} +
+
+
+{:else} +
+ -
-
- {@render children()} -
-
+
+
+ {@render children()} +
+
- - (commandBarOpen = false)} - onSearch={handleCommandBarSearch} - onSelect={handleCommandBarSelect} - quickActions={commandBarQuickActions} - placeholder="Schnellzugriff..." - emptyText="Keine Ergebnisse" - searchingText="Suche..." - /> + + (commandBarOpen = false)} + onSearch={handleCommandBarSearch} + onSelect={handleCommandBarSelect} + quickActions={commandBarQuickActions} + placeholder="Schnellzugriff..." + emptyText="Keine Ergebnisse" + searchingText="Suche..." + /> - - {#if clockOnboarding.shouldShow} - - {/if} -
+ + {#if clockOnboarding.shouldShow} + + {/if} +
+{/if}