From 27c775d816cc6a72b6803397f3347300f5dab7c0 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Thu, 11 Jun 2026 16:00:40 -0400 Subject: [PATCH] feat(stores): promote launcher_loc to Svelte 5 PersistedState MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Creates ae_events_stores__launcher.svelte.ts with PersistedState keyed 'ae_launcher_loc', following the same pattern as badges, leads, and pres_mgmt. All 28 launcher component files migrated from $events_loc.launcher.* to launcher_loc.current.*. events_local_data_struct in ae_events_stores.ts now carries no sub-module objects — all four sub-modules (badges, launcher, leads, pres_mgmt) are authoritative in their own stores. Session state (events_sess.launcher) is unchanged. svelte-check: 0 errors, 0 warnings. Co-Authored-By: Claude Sonnet 4.6 --- src/lib/stores/ae_events_stores.ts | 8 +- .../ae_events_stores__launcher.svelte.ts | 9 + .../[event_id]/(launcher)/+layout.svelte | 6 +- .../launcher_cfg_app_modes.svelte | 69 ++++---- .../launcher_cfg_controller.svelte | 21 +-- .../cfg_components/launcher_cfg_health.svelte | 5 +- .../launcher_cfg_launch_timing.svelte | 4 +- .../launcher_cfg_local_actions.svelte | 8 +- .../launcher_cfg_native_os.svelte | 5 +- .../launcher_cfg_screen_saver.svelte | 14 +- .../launcher_cfg_sync_timers.svelte | 35 ++-- .../launcher_cfg_template.svelte | 5 +- .../launcher_cfg_updates.svelte | 5 +- .../launcher_cfg_wallpaper.svelte | 14 +- .../(launcher)/launcher/+layout.svelte | 161 ++++++++---------- .../launcher/[event_location_id]/+page.svelte | 21 +-- .../launcher_background_sync.svelte | 32 ++-- .../[event_id]/(launcher)/launcher_cfg.svelte | 10 +- .../(launcher)/launcher_file_cont.svelte | 36 ++-- .../(launcher)/launcher_menu.svelte | 6 +- .../launcher_presentation_view.svelte | 7 +- .../(launcher)/launcher_presenter_view.svelte | 6 +- .../launcher_presenter_view_posters.svelte | 6 +- .../(launcher)/launcher_session_view.svelte | 32 ++-- .../launcher_session_view_posters.svelte | 7 +- .../(launcher)/menu_launcher_controls.svelte | 48 +++--- .../(launcher)/menu_location_list.svelte | 14 +- .../(launcher)/menu_session_list.svelte | 10 +- 28 files changed, 289 insertions(+), 315 deletions(-) create mode 100644 src/lib/stores/ae_events_stores__launcher.svelte.ts diff --git a/src/lib/stores/ae_events_stores.ts b/src/lib/stores/ae_events_stores.ts index 13bfa285..3bbd6819 100644 --- a/src/lib/stores/ae_events_stores.ts +++ b/src/lib/stores/ae_events_stores.ts @@ -9,10 +9,7 @@ import type { Writable } from 'svelte/store'; import type { key_val } from '$lib/stores/ae_stores'; import { badges_sess_defaults } from '$lib/stores/ae_events_stores__badges_defaults'; -import { - launcher_loc_defaults, - launcher_sess_defaults -} from '$lib/stores/ae_events_stores__launcher_defaults'; +import { launcher_sess_defaults } from '$lib/stores/ae_events_stores__launcher_defaults'; import { leads_sess_defaults } from '$lib/stores/ae_events_stores__leads_defaults'; import { pres_mgmt_sess_defaults } from '$lib/stores/ae_events_stores__pres_mgmt_defaults'; @@ -63,8 +60,7 @@ const events_local_data_struct: key_val = { }, // Event Presentation Launcher — see ae_events_stores__launcher_defaults.ts - // badges, leads, pres_mgmt have been promoted to their own PersistedState stores. - launcher: launcher_loc_defaults + // badges, leads, pres_mgmt, launcher have all been promoted to their own PersistedState stores. }; export const events_loc: Writable = persisted( diff --git a/src/lib/stores/ae_events_stores__launcher.svelte.ts b/src/lib/stores/ae_events_stores__launcher.svelte.ts new file mode 100644 index 00000000..3d788e17 --- /dev/null +++ b/src/lib/stores/ae_events_stores__launcher.svelte.ts @@ -0,0 +1,9 @@ +import { PersistedState } from 'runed'; +import { launcher_loc_defaults } from './ae_events_stores__launcher_defaults'; + +export const launcher_loc = new PersistedState('ae_launcher_loc', launcher_loc_defaults, { + serializer: { + serialize: JSON.stringify, + deserialize: (raw: string) => ({ ...launcher_loc_defaults, ...JSON.parse(raw) }) + } +}); diff --git a/src/routes/events/[event_id]/(launcher)/+layout.svelte b/src/routes/events/[event_id]/(launcher)/+layout.svelte index 3995eea8..dd8980f4 100644 --- a/src/routes/events/[event_id]/(launcher)/+layout.svelte +++ b/src/routes/events/[event_id]/(launcher)/+layout.svelte @@ -5,7 +5,7 @@ * Ensures background sync runs globally regardless of active tab. */ import { ae_loc } from '$lib/stores/ae_stores'; -import { events_loc } from '$lib/stores/ae_events_stores'; +import { launcher_loc } from '$lib/stores/ae_events_stores__launcher.svelte'; import Launcher_Background_Sync from './launcher_background_sync.svelte'; interface Props { @@ -20,8 +20,8 @@ let { children }: Props = $props(); // design (default / onsite / native) — browser sessions are unaffected because // is_native is only ever true inside the Electron shell. $effect(() => { - if ($ae_loc.is_native && $events_loc.launcher.app_mode !== 'native') { - $events_loc.launcher.app_mode = 'native'; + if ($ae_loc.is_native && launcher_loc.current.app_mode !== 'native') { + launcher_loc.current.app_mode = 'native'; } }); diff --git a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_app_modes.svelte b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_app_modes.svelte index 09d81cc3..166b25e3 100644 --- a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_app_modes.svelte +++ b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_app_modes.svelte @@ -1,6 +1,7 @@