fix(badges): move Badge Type field to top of Staff section
Was at the bottom after print position controls — now first item in Staff Adjustments, before Hide/Unhide Badge, where staff expect it. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1661,6 +1661,92 @@ let allow_tracking_open = $derived(
|
|||||||
|
|
||||||
<div class="ctrl-accordion" class:open={staff_open}>
|
<div class="ctrl-accordion" class:open={staff_open}>
|
||||||
<div class="ctrl-accordion-inner space-y-1 pt-0.5">
|
<div class="ctrl-accordion-inner space-y-1 pt-0.5">
|
||||||
|
<!-- === BADGE TYPE === (only when template defines badge_type_list) -->
|
||||||
|
{#if badge_type_code_li.length > 0}
|
||||||
|
<div
|
||||||
|
class="field-card overflow-hidden rounded-lg"
|
||||||
|
class:field-card--active={active_field === 'badge_type'}>
|
||||||
|
<div class="flex items-center gap-2 px-2 py-1">
|
||||||
|
<div class="min-w-0 flex-1">
|
||||||
|
<p class="field-label">Badge Type</p>
|
||||||
|
{#if badge_type_display}
|
||||||
|
<p class="truncate leading-snug">
|
||||||
|
{badge_type_display}
|
||||||
|
</p>
|
||||||
|
{:else}
|
||||||
|
<p class="text-xs text-gray-400 italic">
|
||||||
|
Tap ✎ to assign
|
||||||
|
</p>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="btn btn-xs preset-tonal-primary shrink-0 transition-colors"
|
||||||
|
onclick={() => toggle_field('badge_type')}
|
||||||
|
aria-expanded={active_field === 'badge_type'}
|
||||||
|
aria-controls="field-form-badge-type"
|
||||||
|
title="Edit badge type"
|
||||||
|
aria-label="Edit badge type">
|
||||||
|
{#if active_field === 'badge_type'}<ChevronDown
|
||||||
|
size="12" />{:else}<Pencil
|
||||||
|
size="12" />{/if}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="ctrl-accordion"
|
||||||
|
class:open={active_field === 'badge_type'}>
|
||||||
|
<div class="ctrl-accordion-inner">
|
||||||
|
<div
|
||||||
|
id="field-form-badge-type"
|
||||||
|
class="border-t border-gray-200 bg-gray-50 px-2 pt-1.5 pb-2 dark:border-gray-700 dark:bg-gray-800">
|
||||||
|
<select
|
||||||
|
id="ctrl-badge-type"
|
||||||
|
name="ctrl-badge-type"
|
||||||
|
class="select w-full"
|
||||||
|
bind:this={select_ref_badge_type}
|
||||||
|
bind:value={edit_badge_type_code}>
|
||||||
|
<option value={null}
|
||||||
|
>— Select badge type —</option>
|
||||||
|
{#each badge_type_code_li as item (item.code)}
|
||||||
|
<option value={item.code}
|
||||||
|
>{item.name}</option>
|
||||||
|
{/each}
|
||||||
|
</select>
|
||||||
|
{@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'),
|
||||||
|
$lq__event_badge_obj?.badge_type_code_override
|
||||||
|
? () =>
|
||||||
|
save_field('badge_type', {
|
||||||
|
badge_type_code_override:
|
||||||
|
null,
|
||||||
|
badge_type_override: null
|
||||||
|
})
|
||||||
|
: undefined,
|
||||||
|
is_dirty_badge_type
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
<!-- === HIDE BADGE ===
|
<!-- === HIDE BADGE ===
|
||||||
Removes this badge from search results for all users.
|
Removes this badge from search results for all users.
|
||||||
Use for duplicates, test records, or badges that should not be printed.
|
Use for duplicates, test records, or badges that should not be printed.
|
||||||
@@ -1935,92 +2021,6 @@ let allow_tracking_open = $derived(
|
|||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- === BADGE TYPE === (only when template defines badge_type_list) -->
|
|
||||||
{#if badge_type_code_li.length > 0}
|
|
||||||
<div
|
|
||||||
class="field-card overflow-hidden rounded-lg"
|
|
||||||
class:field-card--active={active_field ===
|
|
||||||
'badge_type'}>
|
|
||||||
<div class="flex items-center gap-2 px-2 py-1">
|
|
||||||
<div class="min-w-0 flex-1">
|
|
||||||
<p class="field-label">Badge Type</p>
|
|
||||||
{#if badge_type_display}
|
|
||||||
<p class="truncate leading-snug">
|
|
||||||
{badge_type_display}
|
|
||||||
</p>
|
|
||||||
{:else}
|
|
||||||
<p class="text-xs text-gray-400 italic">
|
|
||||||
Tap ✎ to assign
|
|
||||||
</p>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="btn btn-xs preset-tonal-primary shrink-0 transition-colors"
|
|
||||||
onclick={() => toggle_field('badge_type')}
|
|
||||||
aria-expanded={active_field === 'badge_type'}
|
|
||||||
aria-controls="field-form-badge-type"
|
|
||||||
title="Edit badge type"
|
|
||||||
aria-label="Edit badge type">
|
|
||||||
{#if active_field === 'badge_type'}<ChevronDown
|
|
||||||
size="12" />{:else}<Pencil
|
|
||||||
size="12" />{/if}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="ctrl-accordion"
|
|
||||||
class:open={active_field === 'badge_type'}>
|
|
||||||
<div class="ctrl-accordion-inner">
|
|
||||||
<div
|
|
||||||
id="field-form-badge-type"
|
|
||||||
class="border-t border-gray-200 bg-gray-50 px-2 pt-1.5 pb-2 dark:border-gray-700 dark:bg-gray-800">
|
|
||||||
<select
|
|
||||||
id="ctrl-badge-type"
|
|
||||||
name="ctrl-badge-type"
|
|
||||||
class="select w-full"
|
|
||||||
bind:this={select_ref_badge_type}
|
|
||||||
bind:value={edit_badge_type_code}>
|
|
||||||
<option value={null}
|
|
||||||
>— Select badge type —</option>
|
|
||||||
{#each badge_type_code_li as item (item.code)}
|
|
||||||
<option value={item.code}
|
|
||||||
>{item.name}</option>
|
|
||||||
{/each}
|
|
||||||
</select>
|
|
||||||
{@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'),
|
|
||||||
$lq__event_badge_obj?.badge_type_code_override
|
|
||||||
? () =>
|
|
||||||
save_field('badge_type', {
|
|
||||||
badge_type_code_override:
|
|
||||||
null,
|
|
||||||
badge_type_override: null
|
|
||||||
})
|
|
||||||
: undefined,
|
|
||||||
is_dirty_badge_type
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
</div>
|
</div>
|
||||||
<!-- ctrl-accordion-inner staff -->
|
<!-- ctrl-accordion-inner staff -->
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user