diff --git a/src/lib/ae_events/ae_events__event_session.editable_fields.ts b/src/lib/ae_events/ae_events__event_session.editable_fields.ts index 48302f82..7d177453 100644 --- a/src/lib/ae_events/ae_events__event_session.editable_fields.ts +++ b/src/lib/ae_events/ae_events__event_session.editable_fields.ts @@ -2,6 +2,7 @@ export const editable_fields__event_session = [ 'external_id', 'code', 'type_code', + 'event_location_id', 'poc_agree', 'poc_kv_json', 'name', diff --git a/src/routes/events/[event_id]/(pres_mgmt)/session/[session_id]/session_view.svelte b/src/routes/events/[event_id]/(pres_mgmt)/session/[session_id]/session_view.svelte index 9d53021d..3b251ff5 100644 --- a/src/routes/events/[event_id]/(pres_mgmt)/session/[session_id]/session_view.svelte +++ b/src/routes/events/[event_id]/(pres_mgmt)/session/[session_id]/session_view.svelte @@ -17,6 +17,7 @@ let { // Imports import { Modal } from 'flowbite-svelte'; +import { liveQuery } from 'dexie'; import type { key_val } from '$lib/stores/ae_stores'; import { ae_util } from '$lib/ae_utils/ae_utils'; import Element_ae_obj_field_editor from '$lib/elements/element_ae_obj_field_editor.svelte'; @@ -29,6 +30,7 @@ import { events_slct } from '$lib/stores/ae_events_stores'; import { events_func } from '$lib/ae_events/ae_events_functions'; +import { db_events } from '$lib/ae_events/db_events'; import Comp_event_session_poc_profile from './ae_comp__event_session_poc_profile.svelte'; import Comp_event_session_poc_form_agree from './ae_comp__event_session_poc_form_agree.svelte'; @@ -52,6 +54,29 @@ $events_sess.pres_mgmt.show_content__presenter_start = false; // Description expand/collapse — collapsed by default (descriptions can be long) let desc_expanded = $state(false); +// Location list for the session's event — used to build the select options in edit mode. +// WHY: event_location_id is a FK; the editor needs the full list so staff can pick from +// known rooms instead of typing a raw UUID. Keyed by event_id from the session object. +let current_event_id = $derived($lq__event_session_obj?.event_id ?? null); +let lq__event_location_obj_li = $derived( + liveQuery(async () => { + if (!current_event_id) return []; + return await db_events.location + .where('event_id') + .equals(current_event_id) + .sortBy('name'); + }) +); +// { event_location_id: location_name } — consumed by Element_ae_obj_field_editor select +let location_select_options = $derived( + Object.fromEntries( + ($lq__event_location_obj_li ?? []).map((loc) => [ + (loc as { event_location_id: string }).event_location_id, + (loc as { name: string }).name + ]) + ) +); + // QR Code Generation Logic $events_sess.pres_mgmt.session__updated_on = null; $effect(() => { @@ -177,7 +202,33 @@ $effect(() => { $events_loc.pres_mgmt.time_format )} - {#if $lq__event_session_obj.event_location_name} + + + {#if $ae_loc.edit_mode} + + events_func.load_ae_obj_id__event_session({ + api_cfg: $ae_api, + event_session_id: $lq__event_session_obj.id + })}> + + + {$lq__event_session_obj.event_location_name ?? 'No room assigned'} + + + {:else if $lq__event_session_obj.event_location_name} @@ -228,32 +279,55 @@ $effect(() => { {/if} - - {#if $lq__event_session_obj?.description} + + {#if $lq__event_session_obj?.description || $ae_loc.edit_mode}
- - {#if desc_expanded} -

- {$lq__event_session_obj.description} -

+ {#if $ae_loc.edit_mode} + + events_func.load_ae_obj_id__event_session({ + api_cfg: $ae_api, + event_session_id: $lq__event_session_obj?.id + })}> + + Description + + + {:else} + + {#if desc_expanded} +

+ {$lq__event_session_obj?.description} +

+ {/if} {/if}
{/if}