From 75664ad2e1d5c68f860256babfea992559da4e4e Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Thu, 2 Apr 2026 13:44:00 -0400 Subject: [PATCH] feat(pres_mgmt): restore location and description editing in session view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Event location (FK lookup) and description were both visible in the session view but had no edit controls — lost during V3 migration. Restored both: - event_location_id: select dropdown populated from this event's location list (liveQuery on db_events.location filtered by event_id from the session object) - description: textarea editor shown directly in edit_mode (no collapse needed when actively editing) Also added event_location_id to editable_fields__event_session, which was missing and would have caused backend rejections on PATCH. Co-Authored-By: Claude Sonnet 4.6 --- ...e_events__event_session.editable_fields.ts | 1 + .../session/[session_id]/session_view.svelte | 124 ++++++++++++++---- 2 files changed, 100 insertions(+), 25 deletions(-) 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}