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:
@@ -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}">
|
||||
|
||||
@@ -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>
|
||||
/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
})
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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;
|
||||
})
|
||||
);
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user