From 3122725610949058aca54445281f8a7c0221fa41 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Tue, 9 Jun 2026 09:13:47 -0400 Subject: [PATCH] fix(badges): apply print_count-first sort to all three badge display paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The default sort (unprinted first, then name) was only wired into the API order_by_li. Two IDB-local paths were left behind: 1. SCENARIO 2 fallback (no active filters, no text query): used Dexie .sortBy('given_name') — bypassed entirely on initial page load. Fixed: fetch .toArray() then JS-sort by print_count ASC → given_name ASC. 2. Fast-path IDB sort default case: also sorted by given_name only, causing a visible flash of name-ordered results before the API response landed. Fixed: same print_count ASC → given_name ASC comparator. All three paths (API, fast-path IDB, fallback IDB) now agree on sort order. Co-Authored-By: Claude Sonnet 4.6 --- .../[event_id]/(badges)/badges/+page.svelte | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/routes/events/[event_id]/(badges)/badges/+page.svelte b/src/routes/events/[event_id]/(badges)/badges/+page.svelte index b8672240..4c9b40c6 100644 --- a/src/routes/events/[event_id]/(badges)/badges/+page.svelte +++ b/src/routes/events/[event_id]/(badges)/badges/+page.svelte @@ -139,11 +139,17 @@ let lq__event_badge_obj_li = $derived.by(() => { console.log( `Badge Page LQ: Fallback search for event: ${event_id}` ); - return await db_events.badge + // Dexie sortBy supports only one field; sort by print_count then name in JS. + const fallback_results = await db_events.badge .where('event_id') .equals(event_id) .limit(fallback_limit) - .sortBy('given_name'); + .toArray(); + fallback_results.sort((a, b) => + (a.print_count ?? 0) - (b.print_count ?? 0) || + (a.given_name ?? '').localeCompare(b.given_name ?? '') + ); + return fallback_results; } return []; @@ -366,8 +372,10 @@ async function handle_search_refresh(params: any) { ) ); default: - return (a.given_name ?? '').localeCompare( - b.given_name ?? '' + // Matches the API default: unprinted first, then alphabetical. + return ( + (a.print_count ?? 0) - (b.print_count ?? 0) || + (a.given_name ?? '').localeCompare(b.given_name ?? '') ); } });