refactor(badges): standardize reactive search and fix text filtering

- Corrected 'search__event_badge' to use the valid 'default_qry_str' field name, resolving 400 errors during text search.
- Re-implemented the standardized debounced search pattern in '+page.svelte' with a robust Search Guard to eliminate loops.
- Hardened Fast Path local filtering to match the 'Badge' schema and synchronized result sorting with API revalidation.
- Updated 'ae_comp__badge_search.svelte' and 'ae_comp__badge_obj_li.svelte' to align with the shared data pattern and fixed Lucide icon imports.
- Ensured 'events_loc' store initialization for new search-related fields.
This commit is contained in:
Scott Idem
2026-01-27 17:46:55 -05:00
parent 23ecb21fe1
commit 22ede45bd6
2 changed files with 38 additions and 21 deletions

View File

@@ -328,7 +328,7 @@ export async function update_ae_obj__event_badge({
return result;
}
// Updated 2026-01-21 to Restore Full Aether Search Logic
// Updated 2026-01-27 to Restore Full Aether Search Logic
export async function search__event_badge({
api_cfg,
event_id,
@@ -380,20 +380,25 @@ export async function search__event_badge({
const params: key_val = {};
// Restore Fulltext Logic (Aether Business Logic)
if (fulltext_search_qry_str || affiliations_qry_str) {
params['ft_qry'] = {};
if (fulltext_search_qry_str && fulltext_search_qry_str.length > 2) {
params['ft_qry']['default_qry_str'] = fulltext_search_qry_str;
}
if (affiliations_qry_str && affiliations_qry_str.length > 2) {
params['ft_qry']['affiliations'] = affiliations_qry_str;
}
// Standardized Text Search Pattern (V3 API)
// NOTE: Using 'default_qry_str' (Strict DB Column) instead of 'default_qry_string'
if (fulltext_search_qry_str && fulltext_search_qry_str.trim().length > 0) {
const qry = fulltext_search_qry_str.trim();
search_query.and.push({ field: 'default_qry_str', op: 'like', value: `%${qry}%` });
params['lk_qry'] = params['lk_qry'] || {};
params['lk_qry']['default_qry_str'] = qry;
}
if (affiliations_qry_str && affiliations_qry_str.trim().length > 0) {
const qry = affiliations_qry_str.trim();
search_query.and.push({ field: 'affiliations', op: 'like', value: `%${qry}%` });
params['lk_qry'] = params['lk_qry'] || {};
params['lk_qry']['affiliations'] = qry;
}
// Restore Like Logic
if (like_search_qry_str) {
params['lk_qry'] = { 'default_qry_str': like_search_qry_str };
params['lk_qry'] = params['lk_qry'] || {};
params['lk_qry']['default_qry_str'] = like_search_qry_str;
}
if (external_event_id) {
@@ -410,28 +415,36 @@ export async function search__event_badge({
search_query.and.push({ field: 'print_count', op: 'eq', value: 0 });
}
if (enabled === 'enabled') search_query.and.push({ field: 'enable', op: 'eq', value: 1 });
else if (enabled === 'not_enabled') search_query.and.push({ field: 'enable', op: 'eq', value: 0 });
if (enabled === 'enabled') search_query.and.push({ field: 'enable', op: 'eq', value: true });
else if (enabled === 'not_enabled') search_query.and.push({ field: 'enable', op: 'eq', value: false });
if (hidden === 'hidden') search_query.and.push({ field: 'hide', op: 'eq', value: 1 });
else if (hidden === 'not_hidden') search_query.and.push({ field: 'hide', op: 'eq', value: 0 });
if (hidden === 'hidden') search_query.and.push({ field: 'hide', op: 'eq', value: true });
else if (hidden === 'not_hidden') search_query.and.push({ field: 'hide', op: 'eq', value: false });
ae_promises.search__event_badge_obj_li = await api
.search_ae_obj_v3({
api_cfg,
api_cfg: api_cfg,
obj_type: 'event_badge',
search_query,
params, // Correctly pass the specialized business logic params
params,
order_by_li,
limit,
offset,
log_lvl
})
.then(async function (badge_obj_li_get_result) {
if (badge_obj_li_get_result) {
// Handle both direct array and {data: []} envelope
let result_li: ae_EventBadge[] = [];
if (Array.isArray(badge_obj_li_get_result)) {
result_li = badge_obj_li_get_result;
} else if (badge_obj_li_get_result?.data && Array.isArray(badge_obj_li_get_result.data)) {
result_li = badge_obj_li_get_result.data;
}
if (result_li.length > 0) {
if (try_cache) {
const processed_obj_li = await process_ae_obj__event_badge_props({
obj_li: badge_obj_li_get_result,
obj_li: result_li,
event_id,
log_lvl
});
@@ -443,7 +456,7 @@ export async function search__event_badge({
log_lvl
});
}
return badge_obj_li_get_result;
return result_li;
} else {
return [];
}

View File

@@ -92,6 +92,10 @@ const events_local_data_struct: key_val = {
fulltext_search_qry_str: null,
search_badge_type_code: null,
// New additions for search stabilization (Standardized Pattern 2026-01-27)
search_version: 0,
qry__remote_first: false,
// New additions for filter states
qry_printed_status: 'all', // Default to all
qry_affiliations: null, // Default to null for no filter