diff --git a/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte b/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte index e6563b62..d1c6714f 100644 --- a/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte +++ b/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte @@ -181,20 +181,28 @@ }); // Event File - For Location - let lq__location_event_file_obj_li = liveQuery(async () => { + // $derived.by: must recreate the observable when event_location_id changes. + // Plain liveQuery() only re-fires when Dexie detects a change in the initially + // watched index range — if the id starts as null and changes to a real value, + // Dexie never fires because a different range was added (not the null range). + let lq__location_event_file_obj_li = $derived.by(() => { const id = $events_slct.event_location_id; - if (!id) return []; - return await db_events.file - .where('for_id') - .equals(id) - .sortBy('filename'); + return liveQuery(async () => { + if (!id) return []; + return await db_events.file + .where('for_id') + .equals(id) + .sortBy('filename'); + }); }); - // Event Location - let lq__event_location_obj = liveQuery(async () => { + // Event Location — same reason as above + let lq__event_location_obj = $derived.by(() => { const id = $events_slct.event_location_id; - if (!id) return null; - return await db_events.location.get(id); + return liveQuery(async () => { + if (!id) return null; + return await db_events.location.get(id); + }); }); let lq__event_location_obj_li = liveQuery(async () => { @@ -206,27 +214,30 @@ .sortBy('name'); }); - let lq__event_session_obj_li = liveQuery(async () => { + // $derived.by: must recreate when event_location_id changes (see comment above). + let lq__event_session_obj_li = $derived.by(() => { const id = $events_slct.event_location_id; - if (!id) return []; - if (log_lvl > 1) - console.log( - `LQ - Using default sort for Event Session list location_id: ${id}` - ); - let results = await db_events.session - .where('event_location_id') - .equals(id) - .reverse() - .sortBy('name'); + return liveQuery(async () => { + if (!id) return []; + if (log_lvl > 1) + console.log( + `LQ - Event Session list location_id: ${id}` + ); + // Note: .reverse() before .sortBy() is a no-op — sortBy always re-sorts. + let results = await db_events.session + .where('event_location_id') + .equals(id) + .sortBy('name'); - if ( - $events_slct.event_session_obj_li && - JSON.stringify($events_slct.event_session_obj_li) !== - JSON.stringify(results) - ) { - $events_slct.event_session_obj_li = [...(results || [])]; - } - return results; + if ( + $events_slct.event_session_obj_li && + JSON.stringify($events_slct.event_session_obj_li) !== + JSON.stringify(results) + ) { + $events_slct.event_session_obj_li = [...(results || [])]; + } + return results; + }); }); // Event Session (Main View Trigger - Needed for Global Header/Idle)