feat(badges): add manual one-off badge create modal

Two-step creation: POST event_person first, then event_badge linked to it.
Badge create route (event_person parent) pending backend fix — frontend is
ready and passing event_person_id + event_badge_template_id in payload.

- ae_events__event_person.ts: new create function (nested under event)
- ae_events_functions.ts: export create_ae_obj__event_person
- ae_comp__badge_create_form.svelte: modal form with live name preview,
  conditional display-name override, template selector (auto-selects when
  only one template), badge_type_code_li derived from selected template's
  badge_type_list JSON, two-step submit status labels
- +page.svelte: load template list via liveQuery, wire Create Badge button
  (edit_mode only), native <dialog> modal with backdrop, remote-first
  refresh on success

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Scott Idem
2026-03-27 09:59:46 -04:00
parent 35c4341c34
commit f87ab10251
4 changed files with 344 additions and 83 deletions

View File

@@ -33,6 +33,8 @@ import * as event_presenter from '$lib/ae_events/ae_events__event_presenter';
import * as event_badge from '$lib/ae_events/ae_events__event_badge';
import { create_ae_obj__event_person } from '$lib/ae_events/ae_events__event_person';
import * as event_badge_template from '$lib/ae_events/ae_events__event_badge_template';
const export_obj = {
@@ -46,6 +48,9 @@ const export_obj = {
update_ae_obj__event: event.update_ae_obj__event,
sync_config__event_pres_mgmt: event.sync_config__event_pres_mgmt,
// Event Person
create_ae_obj__event_person: create_ae_obj__event_person,
// Event Badges
load_ae_obj_id__event_badge: event_badge.load_ae_obj_id__event_badge,
load_ae_obj_li__event_badge: event_badge.load_ae_obj_li__event_badge,