Fix infinite hydration loop and stabilize global store synchronization

- Refactored layouts to derive account data from stable props instead of reactive stores.
- Wrapped store updates in untrack() with deep equality guards to prevent infinite re-renders.
- Resolved duplicate untrack declarations and missing imports across the project.
- Added fetch safeguards to Element_data_store to prevent redundant API calls.
- Standardized hydration patterns to break circular dependencies during initial load.
This commit is contained in:
Scott Idem
2026-02-08 17:15:20 -05:00
parent 88bc18cf15
commit 718de1457d
33 changed files with 455 additions and 1567 deletions

View File

@@ -1,8 +1,8 @@
<script lang="ts">
import { untrack } from 'svelte';
// *** Import Svelte specific
import { browser } from '$app/environment';
import { goto, invalidateAll } from '$app/navigation';
import { untrack } from 'svelte';
import { Modal } from 'flowbite-svelte';
// *** Import other supporting libraries
@@ -46,10 +46,12 @@
// NOTE: Sync URL params to state.
// We use untrack to prevent infinite loops if navigation triggers within this effect.
// WARNING: Ensure this doesn't clobber user-entered data during background URL updates.
url_user_id = data?.url?.searchParams?.get('user_id');
url_user_key = data?.url?.searchParams?.get('user_key');
url_user_username = data?.url?.searchParams?.get('username');
url_user_email = data?.url?.searchParams?.get('user_email');
untrack(() => {
url_user_id = data?.url?.searchParams?.get('user_id');
url_user_key = data?.url?.searchParams?.get('user_key');
url_user_username = data?.url?.searchParams?.get('username');
url_user_email = data?.url?.searchParams?.get('user_email');
});
});
let ae_promises: key_val = {};