Launcher: Resolved session selection hang and improved reactivity pattern.

This commit is contained in:
Scott Idem
2026-02-11 17:18:55 -05:00
parent cda7a5421c
commit 7549749d14
4 changed files with 95 additions and 189 deletions

View File

@@ -42,168 +42,63 @@
import { events_func } from '$lib/ae_events_functions';
// Event Session (Main View Trigger)
// WHY: We use a simple derived observable. The template handles the $ prefix.
let lq__event_session_obj = $derived(
liveQuery(() => 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;
})
);