From 2cd9657ae18af0969fef4c56d310a2a5bea7fec1 Mon Sep 17 00:00:00 2001 From: seojcarlos Date: Tue, 7 Apr 2026 21:24:11 +0200 Subject: [PATCH] fix: prevent NaN timestamps from breaking event charts in Firefox When date-fns-tz zonedTimeToUtc returns Invalid Date in Firefox, the unary + operator produces NaN, which gets sent as "NaN" in query parameters. Routes using z.coerce.number().int() validation (events/series, event-data/properties) reject NaN as non-integer, returning 400 errors and showing "Something went wrong". This fix: - Falls back to raw date timestamps when timezone conversion produces NaN in useDateParameters - Filters out NaN values in getQueryString to prevent invalid parameters from reaching the server Fixes #4121 --- src/components/hooks/useDateParameters.ts | 7 +++++-- src/lib/url.ts | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/hooks/useDateParameters.ts b/src/components/hooks/useDateParameters.ts index d84b4236a..6600ce8bc 100644 --- a/src/components/hooks/useDateParameters.ts +++ b/src/components/hooks/useDateParameters.ts @@ -7,9 +7,12 @@ export function useDateParameters() { } = useDateRange(); const { timezone, localToUtc, canonicalizeTimezone } = useTimezone(); + const startAtValue = +localToUtc(startDate); + const endAtValue = +localToUtc(endDate); + return { - startAt: +localToUtc(startDate), - endAt: +localToUtc(endDate), + startAt: Number.isFinite(startAtValue) ? startAtValue : +startDate, + endAt: Number.isFinite(endAtValue) ? endAtValue : +endDate, startDate: localToUtc(startDate).toISOString(), endDate: localToUtc(endDate).toISOString(), unit, diff --git a/src/lib/url.ts b/src/lib/url.ts index f6772feec..a4cc7cb30 100644 --- a/src/lib/url.ts +++ b/src/lib/url.ts @@ -2,7 +2,7 @@ export function getQueryString(params: object = {}): string { const searchParams = new URLSearchParams(); Object.entries(params).forEach(([key, value]) => { - if (value !== undefined) { + if (value !== undefined && value !== null && !Number.isNaN(value)) { searchParams.append(key, value); } });