From 6d875216342bcc1e81a72f6df1c959b8a1f04afd Mon Sep 17 00:00:00 2001 From: gnezim Date: Mon, 20 Apr 2026 12:24:57 +0300 Subject: [PATCH] =?UTF-8?q?ScheduleFilter:=20constrain=20Calendar=20to=20?= =?UTF-8?q?=C2=B11/+330=20day=20window=20(Angular=20scheduleMin/MaxDate=20?= =?UTF-8?q?parity)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedule/components/ScheduleFilter.tsx | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) 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