From 363413cd38b7e6433182a00ba22ab6b3e38dabd2 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 17 Jun 2026 16:47:17 +0000 Subject: [PATCH] Fix league sport-season page to show correct game times for FIFA World Cup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getUpcomingScoringEvents already fetched per-game scheduledAt times from playoffMatchGames for sorting, but discarded them from the return value. EventSchedule was showing eventStartsAt (event-level) instead of the accurate per-game times. Now getUpcomingScoringEvents includes earliestGameTime in each returned event, and EventSchedule prefers earliestGameTime over eventStartsAt — matching how UpcomingCalendarPanel works on the Upcoming Events page. Co-Authored-By: Claude Sonnet 4.6 Claude-Session: https://claude.ai/code/session_01KiVGo8gSBXe3WuRniVNKsd --- app/components/sport-season/EventSchedule.tsx | 16 ++++++++++------ app/models/scoring-event.ts | 8 +++++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/components/sport-season/EventSchedule.tsx b/app/components/sport-season/EventSchedule.tsx index 64f4cd8..3b21e99 100644 --- a/app/components/sport-season/EventSchedule.tsx +++ b/app/components/sport-season/EventSchedule.tsx @@ -10,6 +10,7 @@ interface ScheduleEvent { name: string; eventDate: string | null; eventStartsAt?: Date | string | null; + earliestGameTime?: string | null; eventType: string; isComplete: boolean; completedAt?: Date | string | null; @@ -52,10 +53,13 @@ function getEventTypeLabel(eventType: string): string { export function EventSchedule({ upcomingEvents, recentEvents, leagueId, sportsSeasonId }: EventScheduleProps) { const isMounted = useHasMounted(); - function getDisplayDate(event: Pick): string { - if (isMounted && event.eventStartsAt) { - const d = new Date(event.eventStartsAt as string); - if (!isNaN(d.getTime())) return format(d, "MMM d, yyyy"); + function getDisplayDate(event: Pick): string { + if (isMounted) { + const ts = event.earliestGameTime ?? (event.eventStartsAt as string | null | undefined); + if (ts) { + const d = new Date(ts); + if (!isNaN(d.getTime())) return format(d, "MMM d, yyyy"); + } } return formatEventDate(event.eventDate); } @@ -109,8 +113,8 @@ export function EventSchedule({ upcomingEvents, recentEvents, leagueId, sportsSe

{getDisplayDate(event)} - {isMounted && event.eventStartsAt && ( - · {format(new Date(event.eventStartsAt), "h:mm a")} + {isMounted && (event.earliestGameTime ?? event.eventStartsAt) && ( + · {new Date(event.earliestGameTime ?? (event.eventStartsAt as string)).toLocaleTimeString(undefined, { hour: "numeric", minute: "2-digit" })} )}

diff --git a/app/models/scoring-event.ts b/app/models/scoring-event.ts index 354fc76..d1abd32 100644 --- a/app/models/scoring-event.ts +++ b/app/models/scoring-event.ts @@ -353,7 +353,13 @@ export async function getUpcomingScoringEvents( return candidates.length > 0 ? Math.min(...candidates) : Infinity; }; - return events.toSorted((a, b) => getEffectiveMs(a) - getEffectiveMs(b)).slice(0, limit); + return events + .toSorted((a, b) => getEffectiveMs(a) - getEffectiveMs(b)) + .slice(0, limit) + .map((e) => ({ + ...e, + earliestGameTime: earliestGameById.get(e.id)?.toISOString() ?? null, + })); } /**