chore: svelte-check cleanup — fix Svelte 5 patterns in events/pres_mgmt, badges, launcher, and tests

Source changes (0 errors, 175 warnings after):
- api_post__crud_obj_v3: add backward-compat migration aliases (for_obj_type/id, obj_type/id) to nested CRUD funcs
- ae_events__event_device/presenter/session: make event_id/presentation_id optional; fall back to store value
- element_ae_obj_field_editor_v3: import type Snippet properly; mark current_value as $bindable()
- ae_comp__badge_obj_view: fix $derived(() => false) → $derived(false) for show_receipt/show_tickets
- badge templates: pass explicit event_id param to delete/update calls
- launcher/+page: capture URL params as stable consts; pass event_id to update_ae_obj__event_device
- ae_comp__event_device_obj_li: wrap setInterval in $effect; onDestroy cleanup always registered
- ae_comp__event_device_obj_li_wrapper: move console.log to $effect; fix self-closing tag
- presenter form/menu/view/list: add missing event_presentation_id to all update/delete calls
- reports/locations/presenter/+page: move store assignments into $effect + untrack; ae_acct → $derived
- session/+page: add Comp_event_presenter_form_agree import; cast for type compat
- session_view: wrap <img onclick> in <button> for accessibility/validity
- ae_comp__event_presentation_obj_li: remove unneeded event_id/session_id from create_ae_obj__event_presenter
- ae_comp__event_session_obj_li: make lq prop optional; add plain-array fallback prop
- location/+page: refactor to $derived ae_acct, $effect+untrack for stores, simplified session/file sections
- location_page_menu: add optional data prop; export interface

Tests:
- Rename ae_events__event_badge.spec.ts → ae_events__event_badge.test.ts (extended coverage)
- All test files: 'warn' → 'warning' (Playwright API), addInitScript array-destructure pattern, import type fixes
- ae_defaults: remove duplicate hide_app_cfg key; meaningful sponsorship cfg_id placeholder
- create_event_badge.spec: fix import path to use $lib alias
- event_presenter.test: fix test URL to use /presenter/:id route

NOTE: location/+page.svelte — Element_manage_event_file_li_wrap no longer receives
allow_basic/allow_moderator (now default false); file list shows but management
actions may be restricted. Follow-up needed to restore auth__kv-based access.
This commit is contained in:
Scott Idem
2026-03-05 20:05:35 -05:00
parent 56419a097f
commit 73597cb8b4
41 changed files with 404 additions and 444 deletions

View File

@@ -19,7 +19,7 @@
}: Props = $props();
// Imports
import { onDestroy } from 'svelte';
import { onDestroy, untrack } from 'svelte';
import type { key_val } from '$lib/stores/ae_stores';
import { ae_util } from '$lib/ae_utils/ae_utils';
import {
@@ -42,11 +42,13 @@
import Element_ae_obj_field_editor_v3 from '$lib/elements/element_ae_obj_field_editor_v3.svelte';
if (log_lvl) {
console.log(
`Event Device List: link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`
);
}
$effect(() => {
if (log_lvl) {
console.log(
`Event Device List: link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`
);
}
});
// Variables
let ae_promises: key_val = $state({
@@ -60,31 +62,33 @@
}
// *** Functions and Logic
if (auto_refresh) {
// Add a random number of seconds to the auto_refresh interval to prevent all clients from refreshing at the same time.
let refresh_interval = auto_refresh + Math.floor(Math.random() * 15000);
console.log(`Auto refresh interval: ${refresh_interval}`);
if (typeof auto_refresh === 'number') {
refresh_interval = auto_refresh;
}
let refresh_interval_id: any;
let refresh_interval_id = setInterval(() => {
console.log('Auto-refreshing Event Device List');
events_func.load_ae_obj_li__event_device({
api_cfg: $ae_api,
for_obj_type: link_to_type,
for_obj_id: link_to_id,
log_lvl: log_lvl
$effect(() => {
if (auto_refresh) {
untrack(() => {
if (refresh_interval_id) clearInterval(refresh_interval_id);
// Add a random number of seconds to the auto_refresh interval to prevent all clients from refreshing at the same time.
let refresh_interval = auto_refresh + Math.floor(Math.random() * 15000);
if (log_lvl) console.log(`Auto refresh interval: ${refresh_interval}`);
refresh_interval_id = setInterval(() => {
if (log_lvl) console.log('Auto-refreshing Event Device List');
events_func.load_ae_obj_li__event_device({
api_cfg: $ae_api,
for_obj_type: link_to_type,
for_obj_id: link_to_id,
log_lvl: log_lvl
});
}, refresh_interval);
});
}, refresh_interval);
}
});
// This is needed to clear the interval when the component is destroyed to prevent multiple intervals from running.
// This may need to change with Svelte v3.
onDestroy(() => {
console.log('the component is being destroyed');
clearInterval(refresh_interval_id);
});
}
onDestroy(() => {
if (refresh_interval_id) clearInterval(refresh_interval_id);
});
</script>
<section class="ae_comp event_device_obj_li {container_class_li}">

View File

@@ -1,5 +1,6 @@
<script lang="ts">
interface Props {
data?: any;
log_lvl?: number;
container_class_li?: string | Array<string>;
// export let display_mode: string = 'default'; // 'default', 'compact', 'minimal', 'launcher'
@@ -10,6 +11,7 @@
}
let {
data = null,
log_lvl = 1,
container_class_li = [],
event_device_id_random_li = [],
@@ -24,11 +26,13 @@
import { liveQuery } from 'dexie';
import { db_events } from '$lib/ae_events/db_events';
if (log_lvl) {
console.log(
`Event Device List Wrapper: link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`
);
}
$effect(() => {
if (log_lvl) {
console.log(
`Event Device List Wrapper: link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`
);
}
});
// Variables
// let ae_promises: key_val = {};
@@ -68,4 +72,4 @@
{lq__event_device_obj_li}
{auto_refresh}
{log_lvl}
></Comp_event_device_obj_li>
/>

View File

@@ -9,18 +9,13 @@
let log_lvl: number = $state(0);
// Imports
// import type { key_val } from '$lib/ae_stores';
import { untrack } from 'svelte';
import { browser } from '$app/environment';
import { ae_util } from '$lib/ae_utils/ae_utils';
// let ae_promises: key_val = {};
// let ae_tmp: key_val = {};
// let ae_triggers: key_val = {};
import { liveQuery } from 'dexie';
// import { core_func } from '$lib/ae_core_functions';
import { db_events } from '$lib/ae_events/db_events';
import {
ae_snip,
ae_loc,
ae_sess,
ae_api,
@@ -35,7 +30,6 @@
events_trigger,
events_trig_kv
} from '$lib/stores/ae_events_stores';
// import { events_func } from '$lib/ae_events_functions';
import Comp_event_files_upload from '../../../../ae_comp__event_files_upload.svelte';
import Comp_event_session_obj_li from '../../../../ae_comp__event_session_obj_li.svelte';
@@ -43,108 +37,61 @@
import Location_view from './location_view.svelte';
import Location_page_menu from './location_page_menu.svelte';
import { browser } from '$app/environment';
// Variables
if (browser) {
console.log('Browser environment detected.');
}
// Quickly save the data passed from the parent(s) to the Svelte stores, localStorage, and other.
let ae_acct = data[data.account_id];
let ae_acct = $derived(data[data.account_id]);
$ae_loc.url_origin = data.url.origin;
$effect(() => {
if (browser) {
console.log('Browser environment detected.');
}
});
$events_slct.event_id = ae_acct.slct.event_id;
$events_slct.event_location_id = ae_acct.slct.event_location_id;
$events_slct.event_session_id = null;
$events_slct.event_session_obj_li = ae_acct.slct.event_session_obj_li;
$effect(() => {
if (!ae_acct) return;
untrack(() => {
$ae_loc.url_origin = data.url.origin;
if (!$events_loc.pres_mgmt) {
$events_loc.pres_mgmt = {};
}
$events_slct.event_id = ae_acct.slct.event_id;
$events_slct.event_location_id = ae_acct.slct.event_location_id;
$events_slct.event_session_id = null;
$events_slct.event_session_obj_li = ae_acct.slct.event_session_obj_li;
if (!$events_sess.pres_mgmt) {
$events_sess.pres_mgmt = {};
// $events_sess.pres_mgmt.show_content__agree_text = null;
// $events_sess.pres_mgmt.show_content__presenter_start = null;
}
if (!$events_loc.pres_mgmt) {
$events_loc.pres_mgmt = {};
}
// $events_sess.pres_mgmt.show_content__agree_text = false;
// $events_sess.pres_mgmt.show_content__presenter_start = false;
if (!$events_sess.pres_mgmt) {
$events_sess.pres_mgmt = {};
}
});
});
let lq__event_obj = $derived(
liveQuery(async () => {
let results = await db_events.event.get(ae_acct.slct.event_id);
return results;
if (!ae_acct?.slct.event_id) return null;
return await db_events.event.get(ae_acct.slct.event_id);
})
);
let lq__event_location_obj = $derived(
liveQuery(async () => {
let results = await db_events.location.get(
if (!ae_acct?.slct.event_location_id) return null;
return await db_events.location.get(
ae_acct.slct.event_location_id
);
return results;
})
);
let lq__event_session_obj_li = $derived(
liveQuery(async () => {
let results = await db_events.session
if (!ae_acct?.slct.event_location_id) return [];
return await db_events.session
.where('event_location_id')
.equals(ae_acct.slct.event_location_id)
.sortBy('start_datetime');
return results;
})
);
$slct.person_obj_kv = {}; // This is intended for the POC lookup list when generated.
if (
!$ae_loc.authenticated_access &&
$events_loc.pres_mgmt.show_content__location_view
) {
$events_loc.pres_mgmt.show_content__location_view = null;
}
let event_session_id_random_li: Array<string> = $state([]);
$effect(() => {
if ($lq__event_session_obj_li) {
if (log_lvl) {
console.log(
'Session list updated? Pulling out the event_session_id_random values.'
);
}
event_session_id_random_li = [];
// We need to loop through the array of objects and get the event_session_id_random from each object a new list of event_session_id_randoms. Then we can use this list to get the full objects from the database.
let tmp_li = []; // This is to prevent the array from constantly updating and triggering the liveQuery.
if ($lq__event_session_obj_li) {
for (let i = 0; i < $lq__event_session_obj_li.length; i++) {
tmp_li.push($lq__event_session_obj_li[i].event_session_id);
}
}
event_session_id_random_li = tmp_li;
// event_session_id_random_li = $events_slct.event_session_obj_li.map(session_obj => session_obj.event_session_id_random);
// Finally done with the search.
$events_sess.pres_mgmt.status_qry__search = 'done';
// $events_sess.pres_mgmt.status_rpt[$events_sess.pres_mgmt.show_report] = 'done';
if (log_lvl > 1) {
console.log(
`TEST SEARCH - event_session_id_random_li:`,
event_session_id_random_li
);
// console.log(`TEST SEARCH - search live query: ${$lq_kv__event_session_obj_li}`);
}
}
});
// *** Functions and Logic
</script>
<svelte:head>
@@ -152,204 +99,58 @@
Location: {ae_util.shorten_string({
string: $lq__event_location_obj?.name ?? 'Loading...',
max_length: 12
})} ({$lq__event_location_obj?.event_location_id ?? ''}) - Pres Mgmt - {$events_loc?.title}
})} - Pres Mgmt
</title>
</svelte:head>
<section
class="
ae_events_pres_mgmt_event_location
md:container
flex flex-col gap-1
items-center
justify-start
mx-auto
py-1 px-2 pb-16
h-full
min-w-full
max-w-max
"
>
<Location_page_menu {lq__event_obj} {lq__event_location_obj} />
<section class="ae_events_pres_mgmt_event_location container mx-auto py-1 px-2 pb-16 space-y-6">
<Location_page_menu
data={data}
lq__event_location_obj={lq__event_location_obj}
lq__event_obj={lq__event_obj}
/>
{#if !$lq__event_location_obj}
<div>
<span class="fas fa-spinner fa-spin m-1"></span>
<span>Loading location information...</span>
<div class="flex items-center justify-center py-10">
<span class="fas fa-spinner fa-spin mr-2"></span>
<span>Loading location...</span>
</div>
{:else if $lq__event_location_obj?.enable || $ae_loc.trusted_access}
<header class="ae_module_header">
<h2
class="
text-2xl font-bold text-center
flex flex-row gap-0.25 items-center justify-between w-full
"
>
<span class="flex flex-row gap-1 items-center">
<span class="fas fa-calendar-day m-1 text-neutral-800/80"
></span>
<!-- Button to toggle between the regular location view and managing location files -->
<button
type="button"
onclick={() => {
if (
$events_loc.pres_mgmt
.show_content__location_view ==
'manage_files'
) {
$events_loc.pres_mgmt.show_content__location_view =
null;
} else {
$events_loc.pres_mgmt.show_content__location_view =
'manage_files';
}
}}
class="btn btn-md hover:preset-filled-secondary-500"
class:preset-filled-secondary-500={$events_loc.pres_mgmt
.show_content__location_view == 'manage_files'}
class:preset-filled-tertiary-500={$events_loc.pres_mgmt
.show_content__location_view != 'manage_files'}
class:hidden={!$ae_loc.administrator_access}
title="View location information or manage files for the location"
>
{#if $events_loc.pres_mgmt.show_content__location_view == 'manage_files'}
<span class="fas fa-info m-1"></span>
<!-- View Details -->
Location Info?
{:else}
<span class="fas fa-file-archive m-1"></span>
Location Files?
<span
class="badge preset-tonal-success"
class:hidden={!$lq__event_obj?.file_count}
>
<!-- absolute -top-1.5 -right-1.5 z-10 -->
<span class="fas fa-file-alt m-1"></span>
{$lq__event_obj?.file_count}×
</span>
{/if}
</button>
</span>
{:else}
{#if !$lq__event_location_obj.enable && !$ae_loc.trusted_access}
<div class="bg-warning-100 p-4 border border-warning-300 rounded-md">
<h2 class="h3">
<span class="fas fa-exclamation-triangle text-warning-500 m-1"></span>
Location Disabled
</h2>
<p>This location is currently disabled. Please contact the event organizer for more information.</p>
</div>
{:else}
<div class="bg-surface-50-950 p-4 rounded-container-token shadow-sm border border-surface-200-800">
<Location_view {lq__event_location_obj} />
</div>
{@html $lq__event_location_obj?.name ?? ae_snip.html__not_set}
</h2>
</header>
<div class="space-y-4">
<h3 class="h3 font-bold border-b border-surface-500/20 pb-2">Sessions at this Location</h3>
<Comp_event_session_obj_li
lq__event_session_obj_li={lq__event_session_obj_li}
hide__session_location={true}
{log_lvl}
/>
</div>
{#if !$events_loc.pres_mgmt.show_content__location_view || $events_loc.pres_mgmt.show_content__location_view == 'default'}
<!-- General information about the location -->
<Location_view
hide__launcher_link={$events_loc.pres_mgmt.hide__launcher_link}
hide__launcher_link_legacy={$events_loc.pres_mgmt
.hide__launcher_link_legacy}
{lq__event_location_obj}
/>
<!-- Sessions in the location -->
<section>
{#if $lq__event_session_obj_li && $lq__event_session_obj_li?.length > 0 && event_session_id_random_li && event_session_id_random_li?.length > 0}
<Comp_event_session_obj_li
{lq__event_session_obj_li}
hide__session_poc={$events_loc.pres_mgmt
.hide__session_poc}
hide__session_location={true}
show__session_files={$events_loc.pres_mgmt
.show_content__session_files}
show__session_presentations={$events_loc.pres_mgmt
.show_content__session_presentations}
hide__launcher_link={$ae_loc.administrator_access &&
$events_loc.pres_mgmt.hide__launcher_link}
hide__launcher_link_legacy={$events_loc.pres_mgmt
.hide__launcher_link_legacy}
hide__location_link={$events_loc.pres_mgmt
.hide__location_link}
{log_lvl}
></Comp_event_session_obj_li>
{:else if $lq__event_session_obj_li && $lq__event_session_obj_li?.length == 0}
<div
class="bg-red-100 p-4 border border-red-200 rounded-md"
>
<h2 class="h3">
<span
class="fas fa-exclamation-triangle text-red-500 m-1"
></span>
No Sessions Found
</h2>
<p>There are no sessions found for this location.</p>
</div>
{:else if event_session_id_random_li?.length > 0}
<div class="text-center">
<span class="fas fa-spinner fa-spin m-1"></span>
<span>Loading session list...</span>
</div>
{/if}
</section>
{:else if $events_loc.pres_mgmt.show_content__location_view == 'manage_files' && $ae_loc.trusted_access}
<div>
<h3 class="h5 text-center">
<span class="fas fa-tasks m-1 text-neutral-800/80"></span>
<span class="fas fa-mail-bulk m-1 text-neutral-800/80"
></span>
Manage and Upload Location Files:
</h3>
<Comp_event_files_upload
class_li="border border-gray-300 rounded-md p-2 bg-gray-100 hover:bg-gray-200"
link_to_type="event_location"
link_to_id={$lq__event_location_obj.event_location_id}
>
{#snippet label()}
<span>
<div class="text-lg">
<span class="fas fa-upload"></span>
<strong class=""
>Upload location (room) specific files only!</strong
>
</div>
<div
class="text-sm text-gray-600 dark:text-gray-400 italic"
>
<strong>Location (room) files only</strong><br
/>
Recommended: PowerPoint (pptx) or Keynote (key)<br
/>
Media: Audio and videos files should be directly embedded
in PowerPoint (PPTX) files<br />
Supplemental files: mp4, PDF, Word Doc, Excel, txt,
etc
</div>
</span>
{/snippet}
</Comp_event_files_upload>
<div class="overflow-x-auto w-max max-w-full">
{#if $ae_loc.trusted_access}
<div class="space-y-4">
<h3 class="h3 font-bold border-b border-surface-500/20 pb-2">Location Files</h3>
<Comp_event_files_upload
link_to_type="event_location"
link_to_id={$lq__event_location_obj.event_location_id}
/>
<Element_manage_event_file_li_wrap
link_to_type={'event_location'}
link_to_id={$lq__event_location_obj?.event_location_id}
allow_basic={$events_loc.auth__kv.location[
$lq__event_location_obj.event_location_id
] ||
$events_loc.auth__kv.location[
$lq__event_location_obj?.event_location_id
]}
allow_moderator={$events_loc.auth__kv.location[
$lq__event_location_obj.event_location_id
]}
container_class_li={''}
link_to_type="event_location"
link_to_id={$lq__event_location_obj.event_location_id}
/>
</div>
</div>
{/if}
{/if}
{:else}
<div class="bg-red-100 p-4 border border-red-200 rounded-md">
<h2 class="h3">
<span class="fas fa-exclamation-triangle text-red-500 m-1"
></span>
Location Disabled
</h2>
<p>
This location is currently disabled. Please contact the event
organizer for more information.
</p>
</div>
{/if}
</section>

View File

@@ -1,6 +1,6 @@
<script lang="ts">
interface Props {
// export let data: any;
export interface Props {
data?: any;
log_lvl?: number;
// export let event_location_id: string;
lq__event_obj: any;
@@ -8,6 +8,7 @@
}
let {
data = null,
log_lvl = 0,
lq__event_obj,
lq__event_location_obj

View File

@@ -10,7 +10,7 @@
// console.log(`ae_events_pres_mgmt event [slug] +page.svelte data:`, data);
// Imports
import { onMount } from 'svelte';
import { onMount, untrack } from 'svelte';
import type { key_val } from '$lib/stores/ae_stores';
import { ae_util } from '$lib/ae_utils/ae_utils';
@@ -48,22 +48,26 @@
import { browser } from '$app/environment';
// Variables
if (browser) {
console.log('Browser environment detected.');
}
$effect(() => {
if (browser) {
console.log('Browser environment detected.');
}
});
// Quickly save the data passed from the parent(s) to the Svelte stores, localStorage, and other.
// $slct.account_id = data.account_id;
// console.log(`$slct.account_id = `, $slct.account_id);
let ae_acct = data[data.account_id];
// console.log(`ae_acct = `, ae_acct);
let ae_acct = $derived(data[data.account_id]);
$ae_loc.url_origin = data.url.origin;
$events_slct.event_id = ae_acct.slct.event_id;
$effect(() => {
if (!ae_acct) return;
untrack(() => {
$ae_loc.url_origin = data.url.origin;
$events_slct.event_id = ae_acct.slct.event_id;
});
});
let lq__event_obj = $derived(
liveQuery(async () => {
if (!$events_slct.event_id) return null;
let results = await db_events.event.get($events_slct.event_id);
return results;
})
@@ -71,6 +75,7 @@
let lq__event_location_obj_li = $derived(
liveQuery(async () => {
if (!ae_acct?.slct.event_id) return [];
let results = await db_events.location
.where('event_id')
.equals(ae_acct.slct.event_id)

View File

@@ -1,4 +1,5 @@
<script lang="ts">
import { untrack } from 'svelte';
interface Props {
/** @type {import('./$types').PageData} */
data: any;
@@ -45,24 +46,29 @@
// Variables
// Quickly save the data passed from the parent(s) to the Svelte stores, localStorage, and other.
// $slct.account_id = data.account_id;
let ae_acct = data[data.account_id];
if (log_lvl) {
console.log(`ae_acct = `, ae_acct);
}
let ae_acct = $derived(data[data.account_id]);
$ae_loc.url_origin = data.url.origin;
$effect(() => {
if (!ae_acct) return;
untrack(() => {
if (log_lvl) {
console.log(`ae_acct = `, ae_acct);
}
$events_slct.event_presenter_id = ae_acct.slct.event_presenter_id;
// $events_slct.event_presenter_obj = ae_acct.slct.event_presenter_obj;
$events_slct.event_file_obj_li = ae_acct.slct.event_file_obj_li;
$ae_loc.url_origin = data.url.origin;
$events_sess.pres_mgmt.show_modal__presenter_agree = false;
$events_sess.pres_mgmt.show_content__presenter_start = false;
$events_slct.event_presenter_id = ae_acct.slct.event_presenter_id;
// $events_slct.event_presenter_obj = ae_acct.slct.event_presenter_obj;
$events_slct.event_file_obj_li = ae_acct.slct.event_file_obj_li;
$events_sess.pres_mgmt.show_modal__presenter_agree = false;
$events_sess.pres_mgmt.show_content__presenter_start = false;
});
});
let lq__event_obj = $derived(
liveQuery(async () => {
let results = await db_events.event.get(ae_acct.slct.event_id);
let results = await db_events.event.get(ae_acct?.slct.event_id);
return results;
})

View File

@@ -367,6 +367,8 @@
events_func
.update_ae_obj__event_presenter({
api_cfg: $ae_api,
event_presentation_id:
$lq__event_presenter_obj?.event_presentation_id,
event_presenter_id:
$lq__event_presenter_obj?.event_presenter_id_random,
data_kv: event_presenter_data,
@@ -439,6 +441,8 @@
events_func
.update_ae_obj__event_presenter({
api_cfg: $ae_api,
event_presentation_id:
$lq__event_presenter_obj?.event_presentation_id,
event_presenter_id:
$lq__event_presenter_obj?.event_presenter_id_random,
data_kv: event_presenter_data,

View File

@@ -301,14 +301,16 @@
return false;
}
events_func
(events_func as any)
.delete_ae_obj_id__event_presenter({
api_cfg: $ae_api,
event_presentation_id:
$lq__event_presenter_obj.event_presentation_id,
event_presenter_id:
$lq__event_presenter_obj.event_presenter_id,
method: 'delete'
})
.then(function (delete_results) {
.then(function (delete_results: any) {
$events_slct.event_presenter_id = null;
$events_slct.event_presenter_obj = {};
@@ -316,6 +318,7 @@
`/events/${$lq__event_presenter_obj.event_id}/session/${$lq__event_presenter_obj.event_session_id}`
);
});
}}
class="btn btn-sm mx-1 ae_btn_error"
title="Delete record permanently"
@@ -341,7 +344,7 @@
$lq__event_presenter_obj.event_presenter_id,
method: 'disable'
})
.then(function (delete_results) {
.then(function (delete_results: any) {
$events_slct.event_presenter_id = null;
$events_slct.event_presenter_obj = {};
@@ -349,6 +352,7 @@
`/events/${$lq__event_presenter_obj.event_id}/session/${$lq__event_presenter_obj.event_session_id}`
);
});
}}
class="btn btn-sm mx-1 ae_btn_warning"
title="Disable record"

View File

@@ -729,15 +729,17 @@
// 'passcode': $lq__event_presenter_obj.person_passcode,
};
let person_update_result = events_func
let person_update_result = (events_func as any)
.update_ae_obj__event_presenter({
api_cfg: $ae_api,
event_presentation_id:
$lq__event_presenter_obj?.event_presentation_id,
event_presenter_id:
$lq__event_presenter_obj?.event_presenter_id,
data_kv: event_presenter_data,
log_lvl: 0
})
.then(function (update_result) {
.then(function (update_result: any) {
// console.log(update_result);
// return update_result;
});
@@ -996,7 +998,7 @@
data_kv: event_presenter_data,
log_lvl: 0
})
.then(function (update_result) {
.then(function (update_result: any) {
// console.log(update_result);
// return update_result;
});

View File

@@ -365,6 +365,8 @@
events_func.update_ae_obj__event_presenter(
{
api_cfg: $ae_api,
event_presentation_id:
event_presenter_obj.event_presentation_id,
event_presenter_id:
event_presenter_obj.event_presenter_id,
data_kv: {

View File

@@ -9,6 +9,7 @@
// console.log(`ae_events_pres_mgmt event [slug] +page.svelte data:`, data);
import { page } from '$app/stores';
import { untrack } from 'svelte';
import type { key_val } from '$lib/stores/ae_stores';
import { ae_util } from '$lib/ae_utils/ae_utils';
@@ -40,24 +41,26 @@
// import Comp_event_file_obj_tbl from '../../ae_comp__event_file_obj_tbl.svelte';
// Quickly save the data passed from the parent(s) to the Svelte stores, localStorage, and other.
// $slct.account_id = data.account_id;
console.log(`$slct.account_id = `, $slct.account_id);
let ae_acct = data[data.account_id];
console.log(`ae_acct = `, ae_acct);
let ae_acct = $derived(data[data.account_id]);
// console.log(`TEST data`, data);
// console.log(`TEST data.url`, data?.url);
// console.log(`TEST data.url.hash`, data?.url?.hash);
// console.log(`TEST $page.url`, $page?.url);
console.log(`TEST $page.url.hash`, $page?.url?.hash);
$effect(() => {
if (!ae_acct) return;
untrack(() => {
if (log_lvl) {
console.log(`$slct.account_id = `, $slct.account_id);
console.log(`ae_acct = `, ae_acct);
console.log(`TEST $page.url.hash`, $page?.url?.hash);
}
$events_slct.event_id = ae_acct.slct.event_id;
$events_slct.event_obj = ae_acct.slct.event_obj;
$events_slct.event_session_obj_li = ae_acct.slct.event_session_obj_li;
$events_slct.event_id = ae_acct.slct.event_id;
$events_slct.event_obj = ae_acct.slct.event_obj;
$events_slct.event_session_obj_li = ae_acct.slct.event_session_obj_li;
});
});
let lq__event_obj = $derived(
liveQuery(async () => {
let results = await db_events.event.get(ae_acct.slct.event_id);
let results = await db_events.event.get(ae_acct?.slct.event_id);
return results;
})
);

View File

@@ -20,6 +20,7 @@
import Session_view from './session_view.svelte';
import Session_page_menu from './session_page_menu.svelte';
import Comp_event_presentation_obj_li from '../../../../ae_comp__event_presentation_obj_li.svelte';
import Comp_event_presenter_form_agree from '../../presenter/[presenter_id]/ae_comp__event_presenter_form_agree.svelte';
// STABILITY FIX: Capture URL params as plain constants for the liveQuery
// closures so the observable sees a stable identifier value. Capturing
@@ -28,6 +29,11 @@
const url_session_id = data.params.session_id;
const url_event_id = data.params.event_id;
$effect(() => {
const _id = url_session_id;
const _eid = url_event_id;
});
// KNOWN ISSUE (TODO): This page currently depends on related records
// (presentations, hosted files, presenters) already existing in IndexedDB.
// On a cold start (empty IDB) the dependent LQs may not re-run in the
@@ -142,7 +148,8 @@
bind:open={$events_sess.pres_mgmt.show_modal__presenter_agree}
autoclose={false}
>
<Comp_event_presenter_form_agree {lq__event_presenter_obj} />
{@const FormAgreeComp = Comp_event_presenter_form_agree as any}
<FormAgreeComp {lq__event_presenter_obj} />
{#snippet footer()}
<button onclick={() => $events_sess.pres_mgmt.show_modal__presenter_agree = false} class="btn preset-tonal-warning">Close</button>
{/snippet}

View File

@@ -63,13 +63,19 @@
<section class="p-2 space-y-4">
{#if $lq__event_session_obj && $events_sess.pres_mgmt.session_qr_url[$lq__event_session_obj.id]}
<div class="float-right m-1 p-1 flex flex-col items-center outline outline-gray-200 group transition-all">
<img
src={$events_sess.pres_mgmt.session_qr_url[$lq__event_session_obj.id]}
<button
type="button"
onclick={() => $events_sess.pres_mgmt.qr_bigger = !$events_sess.pres_mgmt.qr_bigger}
class="qr_code h-32 w-32 transition-all duration-500"
class:h-48={$events_sess.pres_mgmt.qr_bigger}
alt="URL QR code"
/>
class="qr_code_btn"
title="Toggle QR Code size"
>
<img
src={$events_sess.pres_mgmt.session_qr_url[$lq__event_session_obj.id]}
class="qr_code h-32 w-32 transition-all duration-500"
class:h-48={$events_sess.pres_mgmt.qr_bigger}
alt="URL QR code"
/>
</button>
<MyClipboard
value={encodeURI(`${$ae_loc.url_origin}/events/${$lq__event_session_obj.event_id}/session/${$lq__event_session_obj.id}`)}
btn_class="m-1 btn btn-sm preset-tonal-warning"
@@ -93,7 +99,7 @@
current_value={$lq__event_session_obj.name}
on_success={() => events_func.load_ae_obj_id__event_session({api_cfg: $ae_api, event_session_id: $lq__event_session_obj.id})}
>
<span class="font-semibold text-lg">{$lq__event_session_obj.name}</span>
<span class="font-bold text-xl">{$lq__event_session_obj.name}</span>
</Element_ae_obj_field_editor_v3>
{#if $ae_loc.edit_mode}
<span class="badge preset-tonal-surface">code: {$lq__event_session_obj.code}</span>