diff --git a/src/features/schedule/components/ScheduleFilter.tsx b/src/features/schedule/components/ScheduleFilter.tsx index 4154b10a..3fac2286 100644 --- a/src/features/schedule/components/ScheduleFilter.tsx +++ b/src/features/schedule/components/ScheduleFilter.tsx @@ -8,7 +8,7 @@ * search is route-only. */ -import { type FC, useState, useCallback, type FormEvent } from "react"; +import { type FC, useState, useCallback, useRef, type FormEvent } from "react"; import { useNavigate } from "@modern-js/runtime/router"; import { Calendar } from "primereact/calendar"; import { Slider, type SliderChangeEvent } from "primereact/slider"; @@ -66,6 +66,23 @@ function hhmmToMinutes(value: string | undefined, fallback: number): number { return h * 60 + m; } +// Mirrors Angular AppSettings.scheduleSearchFrom (1 day back) and +// scheduleSearchTo (330 days forward). Keeps the schedule-filter calendar +// to the same range Angular uses via `settings.scheduleMinDate`/`Max`. +function getScheduleMinDate(): Date { + const d = new Date(); + d.setHours(0, 0, 0, 0); + d.setDate(d.getDate() - 1); + return d; +} + +function getScheduleMaxDate(): Date { + const d = new Date(); + d.setHours(0, 0, 0, 0); + d.setDate(d.getDate() + 330); + return d; +} + export const ScheduleFilter: FC = ({ initialDeparture, initialArrival, @@ -95,6 +112,9 @@ export const ScheduleFilter: FC = ({ const [directOnly, setDirectOnly] = useState(initialDirectOnly); const [returnFlights, setReturnFlights] = useState(initialReturnFlights); + const scheduleMinDate = useRef(getScheduleMinDate()).current; + const scheduleMaxDate = useRef(getScheduleMaxDate()).current; + const handleSwap = useCallback(() => { setDeparture(arrival); setArrival(departure); @@ -191,6 +211,8 @@ export const ScheduleFilter: FC = ({ value={dateRange} onChange={(e) => setDateRange((e.value as (Date | null)[]) ?? [null, null])} selectionMode="range" + minDate={scheduleMinDate} + maxDate={scheduleMaxDate} dateFormat="dd.mm.yy" placeholder={`${t("SHARED.DATE_FORMAT")} - ${t("SHARED.DATE_FORMAT")}`} showIcon