Skip to content

Combined-event results still run the pre-#99 UI, and duplicate the single-event table #135

Description

@bjfultn

Summary

Combined-event pages and single-event pages diverged in #99 and have been drifting since. The combined page still renders the pre-#99 client-side filter UI, and the two paths share almost none of their presentation code.

Noticed by BJ: "the results table from combined events looks slightly different than the event pages for single events… it's like it's still using the old code."

It is, literally.

What happened

#99 replaced the single-event page's client-side class-filter chip row with route-based per-class pages (EventClassNav). It did not touch /events/combined/[date], so that page kept the old UI.

combined-table.tsx:400-427 still renders the "Filter class" chip strip — same wrapper classes (bg-muted/40 px-4 py-3 border-b border-border/60), same "N of M" counter — that #99 deleted from single-event pages.

(#133 removes the single-event copy of that chip row, which had become unreachable dead code. The combined copy is still live.)

Visible differences

Single event Combined event
Class selection Route-based nav pills Client-side chip strip
Overview / All PAX / All Raw views Yes None — no PAX view at all
Header Title + class suffix, entry-count badge Eyebrow + title + ranking explanation + session cross-links
Unranked (forfeited) drivers n/a Dedicated list
Per-session time columns n/a Yes

Note the header column: the combined header is the better one. It explains how the view is ranked and links to its siblings — exactly what the single-event views lack, and what would make "All Raw" vs "All PAX" self-describing.

Duplicated code (~950 lines across the two paths)

Piece Status
SortHeader Near-identical; differs only by an added title prop
ClassChip Duplicated — #133 deletes the single-event copy, this one survives
DriverCard Parallel mobile-card implementations
Row type + builder CombinedResultRow/buildCombinedResults vs LeaderboardRow/buildLeaderboard

Proposed fix

Converge up to the combined header, not down to the single-event one.

  1. Shared EventHeader — the combined header generalized: date · view type · N entries eyebrow, accent bar, title, a one-line explanation of how that view ranks, links row, Photos slot.
  2. Per-view explanation copy, e.g. All Raw → "Every entry at this event, ranked on raw corrected time, regardless of class."
  3. Route-based nav on combined — /events/combined/[date]/[class], plus Overview and All Raw — retiring the chip strip.
  4. One shared results table, with per-session columns and the Unranked list as combined-only options; delete the duplicated SortHeader / ClassChip / DriverCard.

To be explicit about scope: the separate route is legitimate — a combined event is a date-group, not an event, so /events/combined/[date] is the right address. What is not defensible is the separate table and presentation layer.

Sequencing

Depends on #133, which adds resolveEventView and the raw view and removes the chip row from leaderboard-table.tsx. Building this off develop instead would conflict heavily in exactly those files. Land #133 (and #134) first, then stack this.

Deferred deliberately — this touches every event results page, so it wants its own PR and its own review rather than riding along with a bug fix.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions