From 961b05c5e4611ffc1b1b6ea5f67be80cf27427b3 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Thu, 12 Mar 2026 14:46:08 -0400 Subject: [PATCH] =?UTF-8?q?Badges:=20controls=20panel=20UX=20polish=20?= =?UTF-8?q?=E2=80=94=20remove=20identity=20card,=20elevate=20print=20btn,?= =?UTF-8?q?=20style=20buttons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ae_comp__badge_print_controls.svelte | 508 ++++++++++-------- .../badges/[badge_id]/print/+page.svelte | 16 +- 2 files changed, 289 insertions(+), 235 deletions(-) diff --git a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte index 8c5a9cf4..9ae31c01 100644 --- a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte +++ b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte @@ -239,49 +239,50 @@ Field card snippets ============================================================ --> - + {#snippet font_ctrl(key: 'name' | 'title' | 'affiliations' | 'location')} {@const cur = key === 'name' ? font_size_name : key === 'title' ? font_size_title : key === 'affiliations' ? font_size_affiliations : font_size_location} -
- Font + Font size for {key}: - + {cur !== null ? `${cur}px` : 'Auto'} {#if cur !== null} {/if}
{/snippet} - + {#snippet field_actions(field_key: string, on_save: () => void, on_cancel: () => void)}
@@ -319,31 +320,14 @@ Main panel ============================================================ --> - -{#if $lq__event_badge_obj} -
-

Badge Station

-

- {$lq__event_badge_obj.full_name_override ?? $lq__event_badge_obj.full_name ?? '—'} -

- {#if badge_type_display} -

{badge_type_display}

- {/if} -

- #{$lq__event_badge_obj.event_badge_id} -

-
-{/if} - - + {#if can_print} -
+ +
{@render font_ctrl('name')} - {#if active_field === 'name' && is_trusted} -
- - - {@render field_actions( - 'name', - () => save_field('name', { full_name_override: edit_full_name_override || null }), - () => cancel_field('name') - )} + +
+
+
+ {#if is_global_edit_mode} + + {/if} + + {@render field_actions( + 'name', + () => save_field('name', { full_name_override: edit_full_name_override || null }), + () => cancel_field('name') + )} +
- {/if} +
- -
-
+
+
-

Professional Title

+

Title

{#if get_display('professional_title_override', 'professional_title')}

{get_display('professional_title_override', 'professional_title')}

{:else} -

Not set — tap ✎ to add

+

Tap ✎ to add

{/if}
{@render font_ctrl('title')} - {#if active_field === 'title'} -
- - - {@render field_actions( - 'title', - () => save_field('title', { professional_title_override: edit_professional_title_override || null }), - () => cancel_field('title') - )} +
+
+
+ {#if is_global_edit_mode} + + {/if} + + {@render field_actions( + 'title', + () => save_field('title', { professional_title_override: edit_professional_title_override || null }), + () => cancel_field('title') + )} +
- {/if} +
- -
-
+
+
-

Affiliations

+

Affiliations

{#if get_display('affiliations_override', 'affiliations')}

{get_display('affiliations_override', 'affiliations')}

{:else} -

Not set — tap ✎ to add

+

Tap ✎ to add

{/if}
{@render font_ctrl('affiliations')} - {#if active_field === 'affiliations'} -
- - - {@render field_actions( - 'affiliations', - () => save_field('affiliations', { affiliations_override: edit_affiliations_override || null }), - () => cancel_field('affiliations') - )} +
+
+
+ {#if is_global_edit_mode} + + {/if} + + {@render field_actions( + 'affiliations', + () => save_field('affiliations', { affiliations_override: edit_affiliations_override || null }), + () => cancel_field('affiliations') + )} +
- {/if} +
- -
-
+
+
-

Location

+

Location

{#if get_display('location_override', 'location')}

{get_display('location_override', 'location')}

{:else} -

Not set — tap ✎ to add

+

Tap ✎ to add

{/if}
{@render font_ctrl('location')} - {#if active_field === 'location'} -
- - - {@render field_actions( - 'location', - () => save_field('location', { location_override: edit_location_override || null }), - () => cancel_field('location') - )} +
+
+
+ {#if is_global_edit_mode} + + {/if} + + {@render field_actions( + 'location', + () => save_field('location', { location_override: edit_location_override || null }), + () => cancel_field('location') + )} +
- {/if} +
- - -
-
+ +
+
-

Lead Scanning

+

Lead Scanning

{$lq__event_badge_obj?.allow_tracking ? 'Allowed' : 'Not allowed'}

- {#if active_field === 'allow_tracking'} -
- - {@render field_actions( - 'allow_tracking', - () => save_field('allow_tracking', { allow_tracking: edit_allow_tracking }), - () => cancel_field('allow_tracking') - )} +
+
+
+ + {@render field_actions( + 'allow_tracking', + () => save_field('allow_tracking', { allow_tracking: edit_allow_tracking }), + () => cancel_field('allow_tracking') + )} +
- {/if} +
- -
-
+
+
-

Pronouns

+

Pronouns

{#if get_display('pronouns_override', 'pronouns')}

{get_display('pronouns_override', 'pronouns')}

{:else} -

Not set — tap ✎ to add

+

Tap ✎ to add

{/if}
- {#if active_field === 'pronouns'} -
- - - {@render field_actions( - 'pronouns', - () => save_field('pronouns', { pronouns_override: edit_pronouns_override || null }), - () => cancel_field('pronouns') - )} +
+
+
+ + {@render field_actions( + 'pronouns', + () => save_field('pronouns', { pronouns_override: edit_pronouns_override || null }), + () => cancel_field('pronouns') + )} +
- {/if} +
- + {#if is_trusted} - -
-

- - Staff adjustments - -

+ +
+ + Staff adjustments +
- - + {#if badge_type_code_li.length > 0} -
-
+
+
-

Badge Type

+

Badge Type

{#if badge_type_display}

{badge_type_display}

{:else} -

Not set — tap ✎ to assign

+

Tap ✎ to assign

{/if}
- {#if active_field === 'badge_type'} -
- - - {@render field_actions( - 'badge_type', - () => save_field('badge_type', { - badge_type_code_override: edit_badge_type_code, - // Keep badge_type_override in sync (name from template list). - // See edge-case note in PROJECT__AE_Events_Badges_Review_Print.md. - badge_type_override: edit_badge_type_code - ? (badge_type_code_li.find(item => item.code === edit_badge_type_code)?.name ?? edit_badge_type_code) - : null - }), - () => cancel_field('badge_type') - )} +
+
+
+ + {@render field_actions( + 'badge_type', + () => save_field('badge_type', { + badge_type_code_override: edit_badge_type_code, + // Keep badge_type_override in sync with the name. + // See PROJECT__AE_Events_Badges_Review_Print.md for edge-case notes. + badge_type_override: edit_badge_type_code + ? (badge_type_code_li.find(item => item.code === edit_badge_type_code)?.name ?? edit_badge_type_code) + : null + }), + () => cancel_field('badge_type') + )} +
- {/if} +
{/if} {/if}
+ + diff --git a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/print/+page.svelte b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/print/+page.svelte index c2815a2a..39906005 100644 --- a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/print/+page.svelte +++ b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/print/+page.svelte @@ -58,6 +58,16 @@ let print_count = $derived($lq__event_badge_obj?.print_count ?? 0); let is_printed = $derived(print_count >= 1); + // Badge type for header — simplified chain (no template list lookup). + // Full lookup with template list is in ae_comp__badge_print_controls. + let badge_type_display = $derived( + $lq__event_badge_obj?.badge_type_override + ?? $lq__event_badge_obj?.badge_type + ?? $lq__event_badge_obj?.badge_type_code_override + ?? $lq__event_badge_obj?.badge_type_code + ?? '' + ); + function build_review_url(): string { // TODO: append ?passcode=... when person_passcode is added to the event_badge schema return `/events/${$lq__event_badge_obj?.event_id}/badges/${$lq__event_badge_obj?.event_badge_id}/review`; @@ -168,8 +178,10 @@ Ready {/if}
- {#if $events_loc?.title} -

{$events_loc.title}

+ {#if badge_type_display || $events_loc?.title} +

+ {badge_type_display}{badge_type_display && $events_loc?.title ? ' · ' : ''}{$events_loc?.title ?? ''} +

{:else if is_printed && $lq__event_badge_obj.print_last_datetime}

Last printed {new Date($lq__event_badge_obj.print_last_datetime).toLocaleString()}