pres_mgmt: migrate to typed PersistedState store, canonical config schema

Replaces untyped $events_loc.pres_mgmt (svelte-persisted-store) with a
dedicated pres_mgmt_loc (runed PersistedState) backed by a fully typed
PresMgmtLocState interface and PressMgmtRemoteCfg for the server-side JSON.

Key changes:
- ae_events_stores__pres_mgmt_defaults.ts: canonical interfaces + defaults
  covering all hide__/show__ fields, labels, report prefs, query filters,
  and lock_config sync fields; qry_enabled uses 'not_enabled' (matches API)
- ae_events_stores__pres_mgmt.svelte.ts: new PersistedState store
- ae_events__event.ts: sync_config__event_pres_mgmt() rewired to write
  directly to pres_mgmt_loc.current; launcher link inversion preserved
- All 26+ pres_mgmt templates migrated from $events_loc.pres_mgmt.* to
  pres_mgmt_loc.current.*
- New config UI at (pres_mgmt)/pres_mgmt/config/ — manager + edit mode only
- Event settings page: removed embedded pres_mgmt form, links to config page
- event_page_menu: Config button visible only when manager_access + edit_mode

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Scott Idem
2026-04-02 15:27:12 -04:00
parent 21f0fe69af
commit fd9e5f6dc0
31 changed files with 1426 additions and 661 deletions

View File

@@ -34,6 +34,7 @@ import {
events_trigger,
events_trig_kv
} from '$lib/stores/ae_events_stores';
import { pres_mgmt_loc } from '$lib/stores/ae_events_stores__pres_mgmt.svelte';
import Element_ae_obj_field_editor from '$lib/elements/element_ae_obj_field_editor.svelte';
import Comp_event_presenter_obj_li from '../events/[event_id]/(pres_mgmt)/presenter/ae_comp__event_presenter_obj_li_wrapper.svelte';
import Element_manage_event_file_li_wrap from '$lib/elements/element_manage_event_file_li_all.svelte';
@@ -163,7 +164,7 @@ import {
class="bg-surface-100-900 flex flex-wrap items-center gap-2 rounded-lg px-3 py-2 text-lg font-bold">
<span
class:hidden={!event_presentation_obj.start_datetime ||
$events_loc.pres_mgmt.hide__presentation_datetime}
pres_mgmt_loc.current.hide__presentation_datetime}
class="border-r-2 border-gray-800/50 px-1 text-base">
{ae_util.iso_datetime_formatter(
event_presentation_obj.start_datetime,
@@ -171,10 +172,10 @@ import {
)}
@
<!-- , -->
<!-- {ae_util.iso_datetime_formatter(event_presentation_obj.start_datetime, $events_loc.pres_mgmt.datetime_format)} -->
<!-- {ae_util.iso_datetime_formatter(event_presentation_obj.start_datetime, pres_mgmt_loc.current.datetime_format)} -->
{ae_util.iso_datetime_formatter(
event_presentation_obj.start_datetime,
$events_loc.pres_mgmt.time_format
pres_mgmt_loc.current.time_format
)}
</span>
@@ -212,7 +213,7 @@ import {
event_presentation_obj.event_presentation_id,
log_lvl: 1
})}>
{#if (event_presentation_obj?.code || event_presentation_obj?.abstract_code) && !$events_loc.pres_mgmt.hide__presentation_code}
{#if (event_presentation_obj?.code || event_presentation_obj?.abstract_code) && !pres_mgmt_loc.current.hide__presentation_code}
<span
class="preset-tonal-warning rounded-md px-2 py-0.5 text-xs leading-none"
title="Presentation code {event_presentation_obj?.code} and abstract code {event_presentation_obj?.abstract_code}">
@@ -246,17 +247,17 @@ import {
<button
type="button"
onclick={() => {
if ($events_loc.pres_mgmt.time_hours == 12) {
$events_loc.pres_mgmt.time_hours = 24;
$events_loc.pres_mgmt.datetime_format =
if (pres_mgmt_loc.current.time_hours == 12) {
pres_mgmt_loc.current.time_hours = 24;
pres_mgmt_loc.current.datetime_format =
'datetime_long';
$events_loc.pres_mgmt.time_format =
pres_mgmt_loc.current.time_format =
'time_short';
} else {
$events_loc.pres_mgmt.time_hours = 12;
$events_loc.pres_mgmt.datetime_format =
pres_mgmt_loc.current.time_hours = 12;
pres_mgmt_loc.current.datetime_format =
'datetime_12_long';
$events_loc.pres_mgmt.time_format =
pres_mgmt_loc.current.time_format =
'time_12_short';
}
}}>
@@ -282,7 +283,7 @@ import {
)}
{ae_util.iso_datetime_formatter(
event_presentation_obj.start_datetime,
$events_loc.pres_mgmt.time_format
pres_mgmt_loc.current.time_format
)}
</Element_ae_obj_field_editor>
-
@@ -300,14 +301,13 @@ import {
})}>
{ae_util.iso_datetime_formatter(
event_presentation_obj.end_datetime,
$events_loc.pres_mgmt.time_format
pres_mgmt_loc.current.time_format
)}
</Element_ae_obj_field_editor>
</div>
<div
class:hidden={!$events_loc.pres_mgmt
.show_content__presentation_description &&
class:hidden={!pres_mgmt_loc.current.show_content__presentation_description &&
!($ae_loc.trusted_access && $ae_loc.edit_mode)}>
<Element_ae_obj_field_editor
object_type={'event_presentation'}