Send events oldest first so the carousel's past sits behind it

25e592b ordered /events upcoming-first, then past latest-first.
The carousel shows the list as it arrives and opens on the first
upcoming event, so past events landed after the upcoming ones and
"previous" no longer went back in time. Plain chronological order
(undated last) puts them before it again; the grid splits upcoming
from past itself, so it reads the same either way. Org pages share
the order and the carousel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Zaldimmar 2026-09-26 17:22:40 -05:00
parent 25e592bfea
commit 7bc71cef8d

View file

@ -438,17 +438,14 @@ function attachAwards(db, orgs) {
Flat, with the event scopes alongside. Retreats.tsx owns the Flat, with the event scopes alongside. Retreats.tsx owns the
band titles and colours and filters this list by scope_id. band titles and colours and filters this list by scope_id.
By date, the way the cards split them: upcoming soonest first, Oldest first, undated last. The carousel shows the list as it
then past most recent first, undated at the end of each. There comes and opens on the first upcoming event, so past events
is no hand-typed order; a tie falls to the title. have to sit before it for "previous" to go back in time; the
grid splits upcoming from past itself. There is no hand-typed
order; a tie falls to the title.
───────────────────────────────────────────────────────────── */ ───────────────────────────────────────────────────────────── */
const EVENT_ORDER = ` const EVENT_ORDER = `starts_on IS NULL, starts_on, title`;
effective_status = 'past',
starts_on IS NULL,
CASE WHEN effective_status = 'past' THEN NULL ELSE starts_on END,
starts_on DESC,
title`;
content.get("/events", (c) => { content.get("/events", (c) => {
const db = c.get("db"); const db = c.get("db");