badges(runtime): honor mod_badges_json flags (badge_id_only search, QR toggle, add/upload/mass-print gating)
This commit is contained in:
@@ -19,11 +19,11 @@ import { ae_loc, ae_api } from '$lib/stores/ae_stores';
|
||||
|
||||
import { db_events } from '$lib/ae_events/db_events';
|
||||
import {
|
||||
events_loc,
|
||||
events_sess,
|
||||
events_slct,
|
||||
events_trigger
|
||||
} from '$lib/stores/ae_events_stores';
|
||||
import { badges_loc } from '$lib/stores/ae_events_stores__badges.svelte';
|
||||
import { events_func } from '$lib/ae_events/ae_events_functions';
|
||||
|
||||
import Comp_badge_search from './ae_comp__badge_search.svelte';
|
||||
@@ -54,24 +54,8 @@ let lq__badge_template_li = $derived(
|
||||
.sortBy('name');
|
||||
})
|
||||
);
|
||||
// *** Initialization & Store Guard ***
|
||||
// Ensure all search fields are initialized to prevent circular undefined triggers
|
||||
if ($events_loc.badges) {
|
||||
if (typeof $events_loc.badges.search_version === 'undefined')
|
||||
$events_loc.badges.search_version = 0;
|
||||
if (typeof $events_loc.badges.qry__remote_first === 'undefined')
|
||||
$events_loc.badges.qry__remote_first = false;
|
||||
if (typeof $events_loc.badges.fulltext_search_qry_str === 'undefined')
|
||||
$events_loc.badges.fulltext_search_qry_str = '';
|
||||
if (typeof $events_loc.badges.search_badge_type_code === 'undefined')
|
||||
$events_loc.badges.search_badge_type_code = '';
|
||||
if (typeof $events_loc.badges.qry_printed_status === 'undefined')
|
||||
$events_loc.badges.qry_printed_status = 'all';
|
||||
if (typeof $events_loc.badges.qry_affiliations === 'undefined')
|
||||
$events_loc.badges.qry_affiliations = '';
|
||||
if (typeof $events_loc.badges.qry_sort_order === 'undefined')
|
||||
$events_loc.badges.qry_sort_order = '';
|
||||
}
|
||||
// badges_loc (PersistedState) is always initialized from badges_loc_defaults —
|
||||
// no manual typeof guards needed. All fields are guaranteed to exist.
|
||||
|
||||
// Variables
|
||||
let show_create_badge_modal: boolean = $state(false);
|
||||
@@ -113,10 +97,10 @@ let lq__event_badge_obj_li = $derived.by(() => {
|
||||
// SCENARIO 2: Fallback broad search (Only if no active filters)
|
||||
if (
|
||||
event_id &&
|
||||
!$events_loc.badges.fulltext_search_qry_str &&
|
||||
$events_loc.badges.qry_printed_status === 'all' &&
|
||||
!$events_loc.badges.qry_affiliations &&
|
||||
!$events_loc.badges.search_badge_type_code
|
||||
!badges_loc.current.fulltext_search_qry_str &&
|
||||
badges_loc.current.qry_printed_status === 'all' &&
|
||||
!badges_loc.current.qry_affiliations &&
|
||||
!badges_loc.current.search_badge_type_code
|
||||
) {
|
||||
if (log_lvl)
|
||||
console.log(
|
||||
@@ -136,16 +120,18 @@ let lq__event_badge_obj_li = $derived.by(() => {
|
||||
// Standardized Reactive Search Pattern (Aether UI V3)
|
||||
// 1. Isolate dependencies into a stable derived object
|
||||
let search_params = $derived({
|
||||
v: $events_loc.badges.search_version,
|
||||
str: ($events_loc.badges.fulltext_search_qry_str ?? '')
|
||||
v: badges_loc.current.search_version,
|
||||
str: (badges_loc.current.fulltext_search_qry_str ?? '')
|
||||
.toLowerCase()
|
||||
.trim(),
|
||||
type: $events_loc.badges.search_badge_type_code,
|
||||
printed: $events_loc.badges.qry_printed_status,
|
||||
aff: ($events_loc.badges.qry_affiliations ?? '').toLowerCase().trim(),
|
||||
sort: $events_loc.badges.qry_sort_order,
|
||||
type: badges_loc.current.search_badge_type_code,
|
||||
printed: badges_loc.current.qry_printed_status,
|
||||
aff: (badges_loc.current.qry_affiliations ?? '').toLowerCase().trim(),
|
||||
sort: badges_loc.current.qry_sort_order,
|
||||
event_id: $events_slct?.event_id,
|
||||
remote_first: $events_loc.badges.qry__remote_first
|
||||
remote_first: badges_loc.current.qry__remote_first,
|
||||
// Event-level override: when true, restrict searches to badge IDs only
|
||||
badge_id_only: $lq__event_obj?.mod_badges_json?.badge_id_only_search ?? false
|
||||
});
|
||||
|
||||
// 2. Controlled effect for triggering searches
|
||||
@@ -208,7 +194,10 @@ async function handle_search_refresh(params: any) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (qry_str) {
|
||||
if (params.badge_id_only && qry_str) {
|
||||
const id = (badge.event_badge_id ?? '').toLowerCase();
|
||||
if (!id.includes(qry_str)) return false;
|
||||
} else if (qry_str) {
|
||||
const given_name = (
|
||||
badge.given_name ?? ''
|
||||
).toLowerCase();
|
||||
@@ -387,7 +376,7 @@ async function handle_search_refresh(params: any) {
|
||||
<Comp_badge_search event_id={$events_slct?.event_id ?? ''} log_lvl={1}
|
||||
></Comp_badge_search>
|
||||
|
||||
{#if $ae_loc.edit_mode}
|
||||
{#if $ae_loc.edit_mode && ($lq__event_obj?.mod_badges_json?.enable_add_badge_btn ?? true)}
|
||||
<div class="flex justify-end px-4">
|
||||
<button
|
||||
type="button"
|
||||
@@ -420,8 +409,8 @@ async function handle_search_refresh(params: any) {
|
||||
create_badge_dialog?.close();
|
||||
show_create_badge_modal = false;
|
||||
// Trigger a remote-first refresh so the new badge appears in results
|
||||
$events_loc.badges.search_version = ($events_loc.badges.search_version ?? 0) + 1;
|
||||
$events_loc.badges.qry__remote_first = true;
|
||||
badges_loc.current.search_version = (badges_loc.current.search_version ?? 0) + 1;
|
||||
badges_loc.current.qry__remote_first = true;
|
||||
}}
|
||||
oncancel={() => {
|
||||
create_badge_dialog?.close();
|
||||
|
||||
Reference in New Issue
Block a user