Lots of work on the Launcher. Still mostly just cleaning things up.

This commit is contained in:
Scott Idem
2025-09-17 15:15:50 -04:00
parent 186923671d
commit c9e9fbec79
7 changed files with 219 additions and 58 deletions

View File

@@ -16,6 +16,7 @@ export async function load_ae_obj_id__event_session(
api_cfg, api_cfg,
event_session_id, event_session_id,
inc_file_li = false, inc_file_li = false,
inc_all_file_li = false,
inc_presentation_li = false, inc_presentation_li = false,
inc_presenter_li = false, inc_presenter_li = false,
enabled = 'enabled', enabled = 'enabled',
@@ -28,6 +29,7 @@ export async function load_ae_obj_id__event_session(
api_cfg: any, api_cfg: any,
event_session_id: string, event_session_id: string,
inc_file_li?: boolean, inc_file_li?: boolean,
inc_all_file_li?: boolean,
inc_presentation_li?: boolean, inc_presentation_li?: boolean,
inc_presenter_li?: boolean, inc_presenter_li?: boolean,
enabled?: string, enabled?: string,
@@ -137,11 +139,12 @@ export async function load_ae_obj_id__event_session(
if (log_lvl) { if (log_lvl) {
console.log(`Need to load the presentation list for the session now`); console.log(`Need to load the presentation list for the session now`);
} }
// NOTE: The files will only be included if inc_all_file_li is true. 2025-09-17
let load_event_presentation_obj_li = load_ae_obj_li__event_presentation({ let load_event_presentation_obj_li = load_ae_obj_li__event_presentation({
api_cfg: api_cfg, api_cfg: api_cfg,
for_obj_type: 'event_session', for_obj_type: 'event_session',
for_obj_id: event_session_id, for_obj_id: event_session_id,
inc_file_li: inc_file_li, inc_file_li: inc_all_file_li,
inc_presenter_li: inc_presenter_li, inc_presenter_li: inc_presenter_li,
enabled: enabled, // all, disabled, enabled enabled: enabled, // all, disabled, enabled
hidden: hidden, // all, hidden, not_hidden hidden: hidden, // all, hidden, not_hidden
@@ -175,6 +178,7 @@ export async function load_ae_obj_li__event_session(
for_obj_type, for_obj_type,
for_obj_id, for_obj_id,
inc_file_li = false, inc_file_li = false,
inc_all_file_li = false,
inc_presentation_li = false, inc_presentation_li = false,
inc_presenter_li = false, inc_presenter_li = false,
enabled = 'enabled', enabled = 'enabled',
@@ -190,6 +194,7 @@ export async function load_ae_obj_li__event_session(
for_obj_type: string, for_obj_type: string,
for_obj_id: string, for_obj_id: string,
inc_file_li?: boolean, inc_file_li?: boolean,
inc_all_file_li?: boolean,
inc_presentation_li?: boolean, inc_presentation_li?: boolean,
inc_presenter_li?: boolean, inc_presenter_li?: boolean,
enabled?: string, // all, disabled, enabled enabled?: string, // all, disabled, enabled
@@ -316,11 +321,12 @@ export async function load_ae_obj_li__event_session(
let event_session_obj = ae_promises.load__event_session_obj_li[i]; let event_session_obj = ae_promises.load__event_session_obj_li[i];
let event_session_id = event_session_obj.event_session_id_random; let event_session_id = event_session_obj.event_session_id_random;
// NOTE: The files will only be included if inc_all_file_li is true. 2025-09-17
let load_event_presentation_obj_li = load_ae_obj_li__event_presentation({ let load_event_presentation_obj_li = load_ae_obj_li__event_presentation({
api_cfg: api_cfg, api_cfg: api_cfg,
for_obj_type: 'event_session', for_obj_type: 'event_session',
for_obj_id: event_session_id, for_obj_id: event_session_id,
inc_file_li: inc_file_li, inc_file_li: inc_all_file_li,
inc_presenter_li: inc_presenter_li, inc_presenter_li: inc_presenter_li,
enabled: enabled, enabled: enabled,
hidden: hidden, hidden: hidden,

View File

@@ -369,6 +369,9 @@ let events_session_data_struct: key_val = {
native: { native: {
}, },
modal__open: false, modal__open: false,
loading__session_li_status: null,
loading__session_id_status: null,
}, },
// Lead Retrievals (Exhibit) // Lead Retrievals (Exhibit)

View File

@@ -2,7 +2,7 @@
let log_lvl: number = $state(1); let log_lvl: number = $state(1);
// *** Import Svelte specific // *** Import Svelte specific
import { onMount, tick } from 'svelte'; // import { onMount, tick } from 'svelte';
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import { sineIn } from 'svelte/easing'; import { sineIn } from 'svelte/easing';
@@ -27,7 +27,7 @@ import { api } from '$lib/api';
import { db_events } from '$lib/ae_events/db_events'; import { db_events } from '$lib/ae_events/db_events';
import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger, time } from '$lib/ae_stores'; import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger, time } from '$lib/ae_stores';
import { events_loc, events_sess, events_slct, events_trigger, events_trig } from '$lib/ae_events_stores'; import { events_loc, events_sess, events_slct, events_trigger, events_trig } from '$lib/ae_events_stores';
import { events_func } from '$lib/ae_events_functions'; // import { events_func } from '$lib/ae_events_functions';
import Launcher_cfg from '../launcher_cfg.svelte'; import Launcher_cfg from '../launcher_cfg.svelte';
import Launcher_menu from '../launcher_menu.svelte'; import Launcher_menu from '../launcher_menu.svelte';
@@ -90,8 +90,30 @@ if (log_lvl > 1) {
// Event // Event
let lq__event_obj = $derived(liveQuery(async () => { let lq__event_obj = $derived(liveQuery(async () => {
if (log_lvl) {
console.log(`lq__event_obj: event_id = ${$events_slct?.event_id}`);
}
let results = await db_events.events let results = await db_events.events
.get($events_slct.event_id); .get($events_slct?.event_id ?? ''); // null or undefined does not reset things like '' does
if (log_lvl) {
console.log(`lq__event_obj: results = `, results);
}
// tmp_event_obj = { ...results };
// Check if results are different than the current session version stored under $events_slct
if ($events_slct.event_obj && results) {
if (JSON.stringify($events_slct.event_obj) !== JSON.stringify(results)) {
$events_slct.event_obj = { ...results};
if (log_lvl) {
console.log(`Session slct stored version has changed for ID = ${$events_slct.event_id}`, $events_slct.event_obj);
}
} else {
if (log_lvl) {
console.log(`Session slct stored version has not changed for ID = ${$events_slct.event_id}`);
}
}
}
return results; return results;
})); }));
@@ -152,28 +174,121 @@ let lq__event_session_obj = $derived(liveQuery(async () => {
// return results; // return results;
// })); // }));
// let lq__event_session_obj_li = $derived(liveQuery(async () => {
// let results = await db_events.sessions
// .where('event_location_id')
// .equals($events_slct.event_location_id)
// // .and((x) => (x.archive_on === null || x.archive_on > (new Date()).toISOString()))
// // .and((x) => (x.archive_on === null || x.archive_on > (new Date()).toISOString())) // null or future events only
// // .and((x) => (x.archive_on < (new Date()).toISOString())) // past events only
// // .and((x) => (x.archive_on > (new Date()).toISOString())) // future events only
// // .orderBy('updated_on')
// // .toArray()
// .reverse()
// // .limit($idaa_loc.bb.qry__limit)
// .sortBy('name');
// // .sortBy('tmp_sort_1');
// // .sortBy('updated_on');
// // .sortBy('updated_on, created_on');
// // .sortBy('[updated_on+created_on]');
// // .sortBy('[created_on+updated_on]');
// return results;
// }));
let lq__event_session_obj_li = $derived(liveQuery(async () => { let lq__event_session_obj_li = $derived(liveQuery(async () => {
let results = await db_events.sessions log_lvl = 1;
.where('event_location_id')
.equals($events_slct.event_location_id) if (log_lvl) {
// .and((x) => (x.archive_on === null || x.archive_on > (new Date()).toISOString())) console.log(`LQ - $lq__event_obj.cfg_json = `, $lq__event_obj?.cfg_json);
// .and((x) => (x.archive_on === null || x.archive_on > (new Date()).toISOString())) // null or future events only console.log(`LQ - $events_loc.filter__category_code = `, $events_loc.filter__category_code);
// .and((x) => (x.archive_on < (new Date()).toISOString())) // past events only }
// .and((x) => (x.archive_on > (new Date()).toISOString())) // future events only
// .orderBy('updated_on') if ($events_sess.session_li_trigger && !$events_sess?.session_li) {
// .toArray() $events_sess.session_li = null;
.reverse() $events_sess.session_li_trigger = false;
// .limit($idaa_loc.bb.qry__limit) }
.sortBy('name');
// .sortBy('tmp_sort_1'); let results;
// .sortBy('updated_on');
// .sortBy('updated_on, created_on'); if ($events_sess?.session_li && $events_sess?.session_li?.length) {
// .sortBy('[updated_on+created_on]'); if (log_lvl) {
// .sortBy('[created_on+updated_on]'); console.log(`LQ - Using $events_sess.session_li to get event sessions.`);
}
// $events_sess.session_li_trigger = false;
let event_session_id_random_li = []; // This is to prevent the array from constantly updating and triggering the liveQuery.
for (let i = 0; i < $events_sess?.session_li.length; i++) {
let event_session_obj = $events_sess?.session_li[i];
let event_session_id_random = event_session_obj.event_session_id_random;
event_session_id_random_li.push(event_session_id_random);
}
// let event_session_id_random_li = tmp_li;
results = await db_events.sessions
.bulkGet(event_session_id_random_li);
// } else if ($lq__event_obj?.cfg_json?.session_group_sort === 'DESC') {
// if (log_lvl) {
// console.log(`LQ - Using DESC sort for Event Session list event_id: ${$events_slct?.event_id}`);
// }
// results = await db_events.sessions
// // .orderBy('updated_on')
// .where('event_id')
// .equals($events_slct?.event_id ?? '') // null or undefined does not reset things like '' does
// .reverse()
// // .sortBy('tmp_sort_2');
// .sortBy('updated_on');
// // .sortBy('title');
// } else if ($events_loc.filter__category_code && $events_loc.filter__category_code.length > 0) {
// if (log_lvl) {
// console.log(`LQ - Using category filter: ${$events_loc.filter__category_code}`);
// }
// results = await db_events.sessions
// .where('event_id')
// .equals($events_slct?.event_id ?? '') // null or undefined does not reset things like '' does
// .and(session => session.category_code === $events_loc.filter__category_code)
// .reverse()
// .sortBy('tmp_sort_1');
} else {
if (log_lvl) {
// console.log(`$lq__event_obj.cfg_json = `, $lq__event_obj?.cfg_json);
console.log(`LQ - Using default sort for Event Session list event_id: ${$events_slct?.event_id}`);
}
results = await db_events.sessions
.where('event_location_id')
.equals($events_slct.event_location_id)
// .where('event_id')
// .equals($events_slct?.event_id ?? '') // null or undefined does not reset things like '' does
.reverse()
.sortBy('name');
// .sortBy('tmp_sort_1');
// .sortBy('updated_on');
}
// Check if results are different than the current session version stored under $events_slct
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];
if (log_lvl) {
console.log(`Session slct li stored version has changed for ID = ${$events_slct.event_id}`, $events_slct.event_session_obj_li);
}
} else {
if (log_lvl > 1) {
console.log(`Session slct li stored version has not changed for ID = ${$events_slct.event_id}`);
}
}
return results; return results;
})); }));
// $: if (!$events_sess.launcher.modal__open) { // $: if (!$events_sess.launcher.modal__open) {
// if ($events_loc.launcher.controller == 'local_push' && $events_sess.launcher.ws_connect_status == 'connected') { // if ($events_loc.launcher.controller == 'local_push' && $events_sess.launcher.ws_connect_status == 'connected') {
// console.log(`Local Push Controller Command: ae_close:event_file_modal`); // console.log(`Local Push Controller Command: ae_close:event_file_modal`);
@@ -187,14 +302,6 @@ let ae_promises: key_val = {
slct_event_presentation_li: null slct_event_presentation_li: null
}; };
onMount(() => {
console.log('Events - Launcher: +layout.svelte');
// Hide the AppShell shell header (id="shell-header") and footer
// document.getElementById('shell-header').classList.add('hidden');
// document.getElementById('shell-footer').classList.add('hidden');
});
console.log(`BROWSER Events - [event_id] launcher +layout.svelte start`);
/* *** BEGIN *** Handle WebSocket events */ /* *** BEGIN *** Handle WebSocket events */
function handle_ws_conn(event) { function handle_ws_conn(event) {
@@ -603,12 +710,7 @@ $effect(() => {
> >
{#if !$lq__event_obj}
<div class="flex flex-row gap-1 items-center justify-center">
<span class="fas fa-spinner fa-spin mx-1"></span>
<span>Loading...</span>
</div>
{:else}
<header <header
id="Main-Header" id="Main-Header"
class=" class="
@@ -620,17 +722,27 @@ $effect(() => {
transition-all duration-1000 transition-all duration-1000
" "
> >
<h3 class="hidden sm:inline-block h4 text-center italic"> <h3 class="hidden sm:inline-block h4 text-center italic text-surface-600-400">
Æ Presentation Launcher Æ Presentation Launcher
</h3> </h3>
<h2 class="h3 text-center">{$lq__event_obj.cfg_json?.short_name}</h2>
<h3 class="h4 text-center italic">
{$lq__event_location_obj?.name}
<!-- {$events_slct.event_location_id} -->
</h3>
</header>
{/if}
{#if $lq__event_obj}
<h2 class="h3 text-center text-surface-600-400">{$lq__event_obj.cfg_json?.short_name}</h2>
<h3
class="h4 text-center italic text-surface-600-400"
title="Location ID: {$lq__event_location_obj?.event_location_id} Name: {$lq__event_location_obj?.name}"
>
{$lq__event_location_obj?.name}
<!-- {$events_slct.event_location_id} -->
</h3>
{:else}
<div class="flex flex-row gap-1 items-center justify-center">
<span class="fas fa-spinner fa-spin mx-1"></span>
<span>Loading event...</span>
</div>
{/if}
</header>
@@ -679,6 +791,7 @@ $effect(() => {
lq__event_location_obj={lq__event_location_obj} lq__event_location_obj={lq__event_location_obj}
slct__event_location_id={$events_slct.event_location_id} slct__event_location_id={$events_slct.event_location_id}
bind:loading__session_li_status={$events_sess.launcher.loading__session_li_status}
lq__event_session_obj_li={lq__event_session_obj_li} lq__event_session_obj_li={lq__event_session_obj_li}
lq__event_session_obj={lq__event_session_obj} lq__event_session_obj={lq__event_session_obj}
slct__event_session_id={$events_slct.event_session_id} slct__event_session_id={$events_slct.event_session_id}

View File

@@ -36,7 +36,8 @@ export async function load({ params, parent, url }) { // route
api_cfg: ae_acct.api, api_cfg: ae_acct.api,
for_obj_type: 'event_location', for_obj_type: 'event_location',
for_obj_id: event_location_id, for_obj_id: event_location_id,
inc_file_li: true, inc_file_li: true, // Only include files directly under the session?
inc_all_file_li: false, // Also include files under presentations and presenters as well?
inc_presentation_li: true, inc_presentation_li: true,
inc_presenter_li: true, inc_presenter_li: true,
enabled: 'enabled', enabled: 'enabled',

View File

@@ -12,9 +12,12 @@ interface Props {
lq__event_location_obj?: any; lq__event_location_obj?: any;
slct__event_location_id?: string|null; slct__event_location_id?: string|null;
loading__session_li_status?: null|boolean|string;
lq__event_session_obj_li: any; lq__event_session_obj_li: any;
loading__session_id_status?: null|boolean|string;
lq__event_session_obj?: any; lq__event_session_obj?: any;
slct__event_session_id?: string|null; slct__event_session_id?: string|null;
log_lvl?: number; log_lvl?: number;
} }
@@ -31,9 +34,12 @@ let {
lq__event_location_obj, lq__event_location_obj,
slct__event_location_id = $bindable(null), slct__event_location_id = $bindable(null),
loading__session_li_status = $bindable(null),
lq__event_session_obj_li, lq__event_session_obj_li,
loading__session_id_status = $bindable(null),
lq__event_session_obj, lq__event_session_obj,
slct__event_session_id = $bindable(null), slct__event_session_id = $bindable(null),
log_lvl = $bindable(0), log_lvl = $bindable(0),
}: Props = $props(); }: Props = $props();
@@ -146,6 +152,7 @@ let ae_promises: key_val = $state({
data_url={data_url} data_url={data_url}
lq__event_location_obj_li={lq__event_location_obj_li} lq__event_location_obj_li={lq__event_location_obj_li}
slct_event_location_id={$events_slct.event_location_id} slct_event_location_id={$events_slct.event_location_id}
bind:loading__session_li_status={loading__session_li_status}
/> />
{/if} {/if}

View File

@@ -1,15 +1,19 @@
<script lang="ts"> <script lang="ts">
interface Props { interface Props {
data_url: any; data_url: any;
loading__session_li_status?: null|boolean|string;
lq__event_location_obj_li: any; lq__event_location_obj_li: any;
slct_event_location_id: string|null; slct_event_location_id: string|null;
log_lvl?: number; log_lvl?: number;
} }
let { let {
data_url, data_url,
loading__session_li_status = $bindable(null),
lq__event_location_obj_li, lq__event_location_obj_li,
slct_event_location_id = null, slct_event_location_id = null,
log_lvl = $bindable(0), log_lvl = $bindable(0),
}: Props = $props(); }: Props = $props();
@@ -71,6 +75,8 @@ let ae_promises: key_val = $state({
onchange={async () => { onchange={async () => {
// console.log(`slct_event_location_id:`, slct_event_location_id); // console.log(`slct_event_location_id:`, slct_event_location_id);
loading__session_li_status = true;
console.log('Remove fields from the URL.'); console.log('Remove fields from the URL.');
// data_url.searchParams.delete('location_id'); // data_url.searchParams.delete('location_id');
data_url.searchParams.delete('presentation_id'); data_url.searchParams.delete('presentation_id');
@@ -83,6 +89,8 @@ let ae_promises: key_val = $state({
let new_url = `/events/${$events_slct.event_id}/launcher`; let new_url = `/events/${$events_slct.event_id}/launcher`;
if (slct_event_location_id) { if (slct_event_location_id) {
loading__session_li_status = 'loading';
$events_loc.launcher.slct.event_location_id = slct_event_location_id; $events_loc.launcher.slct.event_location_id = slct_event_location_id;
$events_slct.event_location_id = slct_event_location_id; $events_slct.event_location_id = slct_event_location_id;
@@ -92,7 +100,8 @@ let ae_promises: key_val = $state({
api_cfg: $ae_api, api_cfg: $ae_api,
for_obj_type: 'event_location', for_obj_type: 'event_location',
for_obj_id: $events_slct.event_location_id, for_obj_id: $events_slct.event_location_id,
inc_file_li: true, inc_file_li: true, // Only include files directly under the session?
inc_all_file_li: false, // Also include files under presentations and presenters as well?
inc_presentation_li: true, inc_presentation_li: true,
inc_presenter_li: true, inc_presenter_li: true,
enabled: $events_loc.launcher.show_content__enabled_sessions ? 'all' : 'enabled', enabled: $events_loc.launcher.show_content__enabled_sessions ? 'all' : 'enabled',
@@ -119,7 +128,9 @@ let ae_promises: key_val = $state({
return load_results; return load_results;
}); });
new_url = `/events/${$events_slct.event_id}/launcher/${$events_slct.event_location_id}`; new_url = `/events/${$events_slct.event_id}/launcher/${slct_event_location_id}`;
loading__session_li_status = 'finished';
} else { } else {
// This will hide the selected session if the location is changed to false. // This will hide the selected session if the location is changed to false.
@@ -129,10 +140,14 @@ let ae_promises: key_val = $state({
$events_slct.event_location_id = null; $events_slct.event_location_id = null;
$events_loc.launcher.slct.event_session_id = null; $events_loc.launcher.slct.event_session_id = null;
$events_slct.event_session_id = null; $events_slct.event_session_id = null;
loading__session_li_status = 'finished';
// WARNING: This may need to be commented out later. // WARNING: This may need to be commented out later.
} }
goto(new_url, {replaceState: true});
// goto(new_url, {replaceState: false}); loading__session_li_status = null;
// goto(new_url, {replaceState: true}); // Updates the URL without reloading the page
goto(new_url, {replaceState: false}); // Updates the URL history without reloading the page
}} }}
> >
<option value="" class="italic text-surface-800-200"> <option value="" class="italic text-surface-800-200">

View File

@@ -1,6 +1,7 @@
<script lang="ts"> <script lang="ts">
interface Props { interface Props {
data_url: any; data_url: any;
loading__session_id_status?: null|boolean|string;
// export let lq__event_session_obj: any; // export let lq__event_session_obj: any;
lq__event_session_obj_li: any; lq__event_session_obj_li: any;
slct_event_session_id: string|null; slct_event_session_id: string|null;
@@ -9,6 +10,7 @@ interface Props {
let { let {
data_url, data_url,
loading__session_id_status = $bindable(null),
lq__event_session_obj_li, lq__event_session_obj_li,
slct_event_session_id = null, slct_event_session_id = null,
log_lvl = $bindable(0), log_lvl = $bindable(0),
@@ -38,7 +40,7 @@ let ae_promises: key_val = $state({
slct_event_presentation_li: null slct_event_presentation_li: null
}); });
let hover_timer_wait = 1000; let hover_timer_wait = 2500;
let hover_timer: any = $state(null); let hover_timer: any = $state(null);
</script> </script>
@@ -77,6 +79,8 @@ let hover_timer: any = $state(null);
onmouseenter={() => { onmouseenter={() => {
// Start a 750 ms timer to prevent changing the session too quickly. // Start a 750 ms timer to prevent changing the session too quickly.
hover_timer = setTimeout(async () => { hover_timer = setTimeout(async () => {
loading__session_id_status = true;
$events_slct.event_session_id = null; $events_slct.event_session_id = null;
await tick(); await tick();
@@ -98,7 +102,9 @@ let hover_timer: any = $state(null);
let new_url = data_url.toString(); let new_url = data_url.toString();
console.log(new_url); console.log(new_url);
goto(new_url, {replaceState: false}); loading__session_id_status = false;
// goto(new_url, {replaceState: true}); // Updates the URL without reloading the page
goto(new_url, {replaceState: false}); // Updates the URL history without reloading the page
}); });
}, hover_timer_wait); }, hover_timer_wait);
}} }}
@@ -106,13 +112,21 @@ let hover_timer: any = $state(null);
clearTimeout(hover_timer); clearTimeout(hover_timer);
}} }}
onclick={async () => { onclick={async () => {
$events_slct.event_session_id = null; loading__session_id_status = true;
await tick();
// $events_slct.event_session_id = null;
// await tick();
$events_slct.event_session_id = event_session_obj?.id; $events_slct.event_session_id = event_session_obj?.id;
data_url.searchParams.set('session_id', event_session_obj?.id); data_url.searchParams.set('session_id', event_session_obj?.id);
$events_slct.event_session_id = event_session_obj?.id; let new_url = data_url.toString();
console.log(new_url);
loading__session_id_status = false;
// goto(new_url, {replaceState: true}); // Updates the URL without reloading the page
goto(new_url, {replaceState: false}); // Updates the URL history without reloading the page
// $events_slct.event_session_id = event_session_obj?.id;
$events_slct.event_session_obj = event_session_obj; $events_slct.event_session_obj = event_session_obj;
ae_promises.slct_event_session_id = events_func.load_ae_obj_id__event_session({ ae_promises.slct_event_session_id = events_func.load_ae_obj_id__event_session({
@@ -126,9 +140,11 @@ let hover_timer: any = $state(null);
.then(async (load_results) => { .then(async (load_results) => {
console.log(`load_results = `, load_results); console.log(`load_results = `, load_results);
let new_url = data_url.toString(); // let new_url = data_url.toString();
console.log(new_url); // console.log(new_url);
goto(new_url, {replaceState: false}); loading__session_id_status = false;
// // goto(new_url, {replaceState: true}); // Updates the URL history without reloading the page
// goto(new_url, {replaceState: false});
}); });
@@ -155,7 +171,7 @@ let hover_timer: any = $state(null);
class:hidden={!$events_loc.launcher.show_content__hidden_sessions && event_session_obj?.hide} class:hidden={!$events_loc.launcher.show_content__hidden_sessions && event_session_obj?.hide}
class:dim={event_session_obj?.hide} class:dim={event_session_obj?.hide}
title={event_session_obj?.name} title={`Session: ${event_session_obj?.name}\nID: ${event_session_obj?.id} | ${ae_util.iso_datetime_formatter(event_session_obj?.start_datetime, $events_loc.launcher.time_format)}`}
> >
<span <span