diff --git a/src/features/online-board/components/OnlineBoardFilter.tsx b/src/features/online-board/components/OnlineBoardFilter.tsx index 5daeb8f6..f5593b13 100644 --- a/src/features/online-board/components/OnlineBoardFilter.tsx +++ b/src/features/online-board/components/OnlineBoardFilter.tsx @@ -26,6 +26,12 @@ function minutesToTime(minutes: number): string { return `${String(h).padStart(2, "0")}:${String(m).padStart(2, "0")}`; } +function minutesToHhmm(minutes: number): string { + const h = Math.floor(minutes / 60); + const m = minutes % 60; + return `${String(h).padStart(2, "0")}${String(m).padStart(2, "0")}`; +} + type AccordionTab = "flight" | "route"; function dateToYyyymmdd(value: Date): string { @@ -229,17 +235,25 @@ export const OnlineBoardFilter: FC = ({ const arrCode = routeArrivalCode.trim().toUpperCase(); if (!depCode && !arrCode) return; + // Only send time range when the user has narrowed the slider, so + // default 00:00–24:00 searches keep the URL clean (Angular spreads + // `...this.timeRange` which is undefined until interaction). + const timeExtras = + timeRange[0] !== 0 || timeRange[1] !== 1440 + ? { timeFrom: minutesToHhmm(timeRange[0]), timeTo: minutesToHhmm(timeRange[1]) } + : {}; + let url: string; if (depCode && !arrCode) { - url = buildOnlineBoardUrl({ type: "departure", station: depCode, date: dateParam }); + url = buildOnlineBoardUrl({ type: "departure", station: depCode, date: dateParam, ...timeExtras }); } else if (!depCode && arrCode) { - url = buildOnlineBoardUrl({ type: "arrival", station: arrCode, date: dateParam }); + url = buildOnlineBoardUrl({ type: "arrival", station: arrCode, date: dateParam, ...timeExtras }); } else { - url = buildOnlineBoardUrl({ type: "route", departure: depCode, arrival: arrCode, date: dateParam }); + url = buildOnlineBoardUrl({ type: "route", departure: depCode, arrival: arrCode, date: dateParam, ...timeExtras }); } void navigate(`/${locale}/${url}`); }, - [routeDepartureCode, routeArrivalCode, routeDate, navigate, locale], + [routeDepartureCode, routeArrivalCode, routeDate, timeRange, navigate, locale], ); return (