diff --git a/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte b/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte
index 6a7811d6..a0c0b6f9 100644
--- a/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte
+++ b/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte
@@ -78,18 +78,30 @@
};
}
+ // Unified Selection Sync (Refactored 2026-02-11)
+ // WHY: We track URL params directly to ensure the UI reacts instantly to navigation.
+ // We use untrack for store writes to prevent circular dependency loops.
$effect(() => {
- if (log_lvl) {
- console.log(`event_id: ${data.params.event_id}`);
- console.log(`event_location_id: ${data.params.event_location_id}`);
- console.log(
- `event_session_id: ${data.url.searchParams.get('session_id')}`
- );
+ const url_session_id = data.url.searchParams.get('session_id');
+ const path_location_id = data.params.event_location_id;
+ const path_event_id = data.params.event_id;
+
+ if (log_lvl > 1) {
+ console.log(`[Launcher Sync] URL Change: event=${path_event_id}, loc=${path_location_id}, sess=${url_session_id}`);
}
+
untrack(() => {
- $events_slct.event_id = data.params.event_id;
- $events_slct.event_location_id = data.params.event_location_id;
- $events_slct.event_session_id = data.url.searchParams.get('session_id');
+ if ($events_slct.event_id !== path_event_id) {
+ $events_slct.event_id = path_event_id;
+ }
+ if ($events_slct.event_location_id !== path_location_id) {
+ $events_slct.event_location_id = path_location_id;
+ }
+ // CRITICAL: Ensure session_id is synced to store so LiveQueries react
+ if ($events_slct.event_session_id !== url_session_id) {
+ if (log_lvl) console.log(`[Launcher Sync] Updating store session_id: ${url_session_id}`);
+ $events_slct.event_session_id = url_session_id;
+ }
});
});
@@ -570,11 +582,9 @@
{/if}
- {#if $events_slct.event_session_id && $lq__event_session_obj}
+ {#if $events_slct.event_session_id}
{:else if $events_slct.event_session_id}
db_events.session.get(slct__event_session_id))
);
- // import Event_launcher_file_cont from './launcher_file_cont.svelte';
-
- // export let hide_description: boolean = true;
- // export let show_designations: boolean = false;
- // export let show_email: boolean = false;
-
// Event File (for a Session)
+ // WHY: Pure data retrieval. Side effects (updating global stores) are removed
+ // to prevent circular reactivity loops during rapid navigation.
let lq__event_file_obj_li = $derived(
liveQuery(async () => {
- if (log_lvl) {
- console.log(
- `lq__event_file_obj: event_file_id = ${$events_slct?.event_file_id}`
- );
+ if (!slct__event_session_id) return [];
+
+ if (log_lvl > 1) {
+ console.log(`[LQ] Fetching files for session: ${slct__event_session_id}`);
}
- let results = await db_events.file
- // .where('event_session_id')
+
+ return await db_events.file
.where('for_id')
.equals(slct__event_session_id)
- .reverse() // Need reverse for created_on newest first.
- .sortBy('created_on'); // or filename
- if (log_lvl) {
- console.log(`lq__event_file_obj_li: results = `, results);
- }
-
- // Check if results are different than the current $events_slct.event_file_obj_li
- if ($events_slct.event_file_obj_li && results) {
- if (
- JSON.stringify($events_slct.event_file_obj_li) !==
- JSON.stringify(results)
- ) {
- $events_slct.event_file_obj_li = [...results];
- if (log_lvl) {
- console.log(
- `$events_slct.event_file_obj_li has changed for event_session_id: ${slct__event_session_id}`,
- $events_slct.event_file_obj_li
- );
- }
- } else {
- if (log_lvl) {
- console.log(
- `$events_slct.event_file_obj_li has not changed for event_session_id: ${slct__event_session_id}`
- );
- }
- }
- } else if (results) {
- $events_slct.event_file_obj_li = [...results];
- }
-
- return results;
+ .reverse()
+ .sortBy('created_on');
})
);
- // Does not refresh when the event_file_id_li_json changes.
- // let lq_get__event_file_obj_li = liveQuery(
- // () => db_events.file
- // .bulkGet($lq__event_session_obj?.event_file_id_li_json ?? [''])
- // );
- // console.log(`$lq__event_session_obj?.event_file_id_li_json = `, $lq__event_session_obj?.event_file_id_li_json);
-
// Event Presentation
- // let lq__event_presentation_obj = liveQuery(
- // () => db_events.presentation
- // .get($events_slct.event_presentation_id)
- // );
-
let lq__event_presentation_obj_li = $derived(
liveQuery(async () => {
- if (log_lvl) {
- console.log(
- `lq__event_presentation_obj_li: slct__event_session_id = ${slct__event_session_id}`
- );
+ if (!slct__event_session_id) return [];
+
+ if (log_lvl > 1) {
+ console.log(`[LQ] Fetching presentations for session: ${slct__event_session_id}`);
}
+
let sort_by = 'start_datetime';
if (type_code == 'poster') {
sort_by = 'name';
}
- let results = await db_events.presentation
+ return await db_events.presentation
.where('event_session_id')
.equals(slct__event_session_id)
.sortBy(sort_by);
- // .sortBy('name')
- if (log_lvl) {
- console.log(
- `lq__event_presentation_obj_li: results = `,
- results
- );
- }
-
- // Check if results are different than the current $events_slct.event_presentation_obj_li
- if ($events_slct.event_presentation_obj_li && results) {
- if (
- JSON.stringify($events_slct.event_presentation_obj_li) !==
- JSON.stringify(results)
- ) {
- $events_slct.event_presentation_obj_li = { ...results };
- if (log_lvl) {
- console.log(
- `$events_slct.event_presentation_obj_li has changed for event_session_id: ${slct__event_session_id}`,
- $events_slct.event_presentation_obj_li
- );
- }
- } else {
- if (log_lvl) {
- console.log(
- `$events_slct.event_presentation_obj_li has not changed for event_session_id: ${slct__event_session_id}`
- );
- }
- }
- }
-
- return results;
})
);
- // FIX! This id list needs to be updated. It is currently commented out in the menu_session_list.svelte file.
- // let lq_get__event_presentation_obj_li = liveQuery(
- // () => db_events.presentation
- // .bulkGet($events_slct.id_li__event_presentation)
- // );
-
+ // Event Presenter
let lq__event_presenter_obj_li = $derived(
liveQuery(async () => {
- if (log_lvl) {
- console.log(
- `lq__event_presenter_obj_li: slct__event_session_id = ${slct__event_session_id}`
- );
+ if (!slct__event_session_id) return [];
+
+ if (log_lvl > 1) {
+ console.log(`[LQ] Fetching presenters for session: ${slct__event_session_id}`);
}
- let results = await db_events.presenter
+
+ return await db_events.presenter
.where('event_session_id')
.equals(slct__event_session_id)
.sortBy('full_name');
- if (log_lvl) {
- console.log(`lq__event_presenter_obj_li: results = `, results);
- }
-
- // Check if results are different than the current $events_slct.event_presenter_obj_li
- if ($events_slct.event_presenter_obj_li && results) {
- if (
- JSON.stringify($events_slct.event_presenter_obj_li) !==
- JSON.stringify(results)
- ) {
- $events_slct.event_presenter_obj_li = { ...results };
- if (log_lvl) {
- console.log(
- `$events_slct.event_presenter_obj_li has changed for event_session_id: ${slct__event_session_id}`,
- $events_slct.event_presenter_obj_li
- );
- }
- } else {
- if (log_lvl) {
- console.log(
- `$events_slct.event_presenter_obj_li has not changed for event_session_id: ${slct__event_session_id}`
- );
- }
- }
- }
-
- return results;
})
);
diff --git a/src/routes/events/[event_id]/(launcher)/menu_session_list.svelte b/src/routes/events/[event_id]/(launcher)/menu_session_list.svelte
index 32331055..2c471490 100644
--- a/src/routes/events/[event_id]/(launcher)/menu_session_list.svelte
+++ b/src/routes/events/[event_id]/(launcher)/menu_session_list.svelte
@@ -1,6 +1,5 @@