ScheduleFilter: constrain Calendar to ±1/+330 day window (Angular scheduleMin/MaxDate parity)
This commit is contained in:
@@ -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<ScheduleFilterProps> = ({
|
||||
initialDeparture,
|
||||
initialArrival,
|
||||
@@ -95,6 +112,9 @@ export const ScheduleFilter: FC<ScheduleFilterProps> = ({
|
||||
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<ScheduleFilterProps> = ({
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user