diff --git a/src/lib/components/faith/StreakCounter.svelte b/src/lib/components/faith/StreakCounter.svelte index 34f01e1..f6244d4 100644 --- a/src/lib/components/faith/StreakCounter.svelte +++ b/src/lib/components/faith/StreakCounter.svelte @@ -30,9 +30,12 @@ const labels = $derived({ }); // Initialize store on mount (client-side only) +// Init with server data BEFORE assigning to streak, so displayLength +// never sees stale localStorage data from the singleton onMount(() => { - streak = getRosaryStreak(); - streak.initWithServerData(streakData, streakData !== null); + const s = getRosaryStreak(); + s.initWithServerData(streakData, isLoggedIn); + streak = s; }); async function pray() { diff --git a/src/lib/stores/rosaryStreak.svelte.ts b/src/lib/stores/rosaryStreak.svelte.ts index 24b59ad..05ef3b8 100644 --- a/src/lib/stores/rosaryStreak.svelte.ts +++ b/src/lib/stores/rosaryStreak.svelte.ts @@ -79,7 +79,6 @@ class RosaryStreakStore { #initialized = false; #syncing = $state(false); #pendingSync = false; // Track if we have unsynced changes - #hasSyncedOnce = false; // Track if initial sync has completed #isOffline = $state(false); #reconnectInterval: ReturnType | null = null; @@ -164,14 +163,11 @@ class RosaryStreakStore { return this.#syncing; } - // Initialize with server data (called once on page load) + // Initialize with server data (called on each component mount) initWithServerData(serverData: StreakData | null, isLoggedIn: boolean): void { - if (this.#hasSyncedOnce) return; // Only sync once - this.#isLoggedIn = isLoggedIn; if (!isLoggedIn || !serverData) { - this.#hasSyncedOnce = true; return; } @@ -187,8 +183,6 @@ class RosaryStreakStore { if (merged.length !== serverData.length || merged.lastPrayed !== serverData.lastPrayed) { this.#pushToServer(); } - - this.#hasSyncedOnce = true; } async #pushToServer(): Promise {