badges(config): fix duplicate keys and initialize draft when mod_badges_json missing; update settings button style

This commit is contained in:
Scott Idem
2026-04-02 17:06:23 -04:00
parent 1935564645
commit 4a5b4bf7cd
2 changed files with 504 additions and 38 deletions

View File

@@ -17,7 +17,6 @@ import { ae_loc, ae_api } from '$lib/stores/ae_stores';
import AE_Comp_Editor_CodeMirror from '$lib/elements/element_editor_codemirror.svelte';
import Ae_comp_event_settings_form from './ae_comp__event_settings_form.svelte';
import Ae_comp_event_settings_basic_form from './ae_comp__event_settings_basic_form.svelte';
import Ae_comp_event_settings_badges_form from './ae_comp__event_settings_badges_form.svelte';
import Ae_comp_event_settings_abstracts_form from './ae_comp__event_settings_abstracts_form.svelte';
import { Modal } from 'flowbite-svelte';
import Comp_badge_create_form from '../(badges)/badges/ae_comp__badge_create_form.svelte';
@@ -26,7 +25,6 @@ import Comp_badge_upload_form from '../(badges)/badges/ae_comp__badge_upload_for
let event_id = page.params.event_id as string;
let event_obj: Event | undefined | null = $state(null);
let cfg_json_view = $state('form');
let badges_json_view = $state('form');
let abstracts_json_view = $state('form');
// Temp string values for CodeMirror binding
@@ -273,42 +271,38 @@ async function handle_save(field_name: string, data: any) {
<details class="details">
<summary class="summary">Badges (mod_badges_json)</summary>
<div class="p-4">
<div class="flex justify-end">
<button
type="button"
class="btn btn-sm"
onclick={() => (badges_json_view = 'form')}
>Form</button>
<button
type="button"
class="btn btn-sm"
onclick={() => (badges_json_view = 'json')}
>JSON</button>
</div>
{#if badges_json_view === 'form'}
<Ae_comp_event_settings_badges_form
bind:mod_badges_json={event_obj.mod_badges_json}
onsave={(data: any) =>
handle_save('mod_badges_json', data)} />
{:else}
<AE_Comp_Editor_CodeMirror
readonly={false}
content={tmp_badges_json_str}
bind:new_content={tmp_badges_json_str}
show_line_numbers={true}
placeholder="JSON config"
class_li="p-1 preset-outlined-success-400-600 shadow-lg rounded-lg" />
<button
type="button"
class="btn preset-tonal-primary"
onclick={() => {
handle_save(
'mod_badges_json',
tmp_badges_json_str
);
}}>Save</button>
{/if}
<div class="p-4 space-y-3">
<p class="text-sm text-surface-500">
Manage badge search controls, QR config, access passcodes, and
per-event field edit permissions.
</p>
<a
href="/events/{event_id}/badges/config"
class="btn preset-tonal-primary">
Go to Badges Config →
</a>
<!-- Raw JSON fallback for debugging / emergency edits -->
<details class="mt-2">
<summary class="cursor-pointer text-xs text-surface-400">Raw JSON (advanced)</summary>
<div class="mt-2 space-y-2">
<AE_Comp_Editor_CodeMirror
readonly={false}
content={tmp_badges_json_str}
bind:new_content={tmp_badges_json_str}
show_line_numbers={true}
placeholder="JSON config"
class_li="p-1 preset-outlined-success-400-600 shadow-lg rounded-lg" />
<button
type="button"
class="btn preset-tonal-primary"
onclick={() => {
handle_save(
'mod_badges_json',
tmp_badges_json_str
);
}}>Save Raw JSON</button>
</div>
</details>
</div>
</details>