From 35fed53e2a7ee9a0992c46743d90f1232fbb675b Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Thu, 28 May 2026 20:11:14 -0400 Subject: [PATCH] fix(launcher): sort presentations by priority > sort > start_datetime > code > name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaced single-field sortBy() (poster→name, oral→start_datetime) with toArray() + JS comparator matching the same sort chain as Pres Mgmt. Removes the sort_by branch since the comparator handles both session types. Co-Authored-By: Claude Sonnet 4.6 --- .../(launcher)/launcher_session_view.svelte | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/routes/events/[event_id]/(launcher)/launcher_session_view.svelte b/src/routes/events/[event_id]/(launcher)/launcher_session_view.svelte index a543c45c..332165c1 100644 --- a/src/routes/events/[event_id]/(launcher)/launcher_session_view.svelte +++ b/src/routes/events/[event_id]/(launcher)/launcher_session_view.svelte @@ -90,11 +90,12 @@ let lq__event_file_obj_li = $derived.by(() => { }); // Event Presentation -// WHY: $derived.by — same reason as above. Captures both id and sort_by in the outer -// closure so a new Observable is created whenever the session or its type changes. +// WHY: $derived.by — captures id in the outer closure so a new Observable is +// created whenever the session changes. Multi-field sort requires toArray() + JS +// comparator since Dexie's sortBy() is single-field only. +// Order: priority DESC → sort ASC → start_datetime ASC → code ASC → name ASC let lq__event_presentation_obj_li = $derived.by(() => { const id = slct__event_session_id; - const sort_by = type_code == 'poster' ? 'name' : 'start_datetime'; return liveQuery(async () => { if (!id) return []; @@ -102,10 +103,32 @@ let lq__event_presentation_obj_li = $derived.by(() => { console.log(`[LQ] Fetching presentations for session: ${id}`); } - return await db_events.presentation + const results = await db_events.presentation .where('event_session_id') .equals(id) - .sortBy(sort_by); + .toArray(); + return results.sort((a, b) => { + // priority DESC (true first) + const pa = a.priority ? 1 : 0; + const pb = b.priority ? 1 : 0; + if (pb !== pa) return pb - pa; + // sort ASC + const sa = a.sort ?? 0; + const sb = b.sort ?? 0; + if (sa !== sb) return sa - sb; + // start_datetime ASC + const da = a.start_datetime ?? ''; + const db_val = b.start_datetime ?? ''; + if (da !== db_val) return da < db_val ? -1 : 1; + // code ASC + const ca = a.code ?? ''; + const cb = b.code ?? ''; + if (ca !== cb) return ca < cb ? -1 : 1; + // name ASC + const na = a.name ?? ''; + const nb = b.name ?? ''; + return na < nb ? -1 : na > nb ? 1 : 0; + }); }); });