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 @@