Launcher: Resolved session selection hang and improved reactivity pattern.
This commit is contained in:
@@ -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;
|
||||
})
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user