OnlineBoardFilter: seed time range from URL params (Angular parity)
This commit is contained in:
@@ -58,10 +58,20 @@ export interface OnlineBoardFilterProps {
|
||||
initialDeparture?: string;
|
||||
initialArrival?: string;
|
||||
initialDate?: string;
|
||||
initialTimeFrom?: string;
|
||||
initialTimeTo?: string;
|
||||
initialTab?: AccordionTab;
|
||||
initialFlightNumber?: string;
|
||||
}
|
||||
|
||||
function hhmmToMinutes(value: string | undefined, fallback: number): number {
|
||||
if (!value || value.length !== 4) return fallback;
|
||||
const h = Number(value.slice(0, 2));
|
||||
const m = Number(value.slice(2, 4));
|
||||
if (Number.isNaN(h) || Number.isNaN(m)) return fallback;
|
||||
return h * 60 + m;
|
||||
}
|
||||
|
||||
function yyyymmddToDate(yyyymmdd: string): Date {
|
||||
const y = parseInt(yyyymmdd.slice(0, 4), 10);
|
||||
const m = parseInt(yyyymmdd.slice(4, 6), 10) - 1;
|
||||
@@ -100,6 +110,8 @@ export const OnlineBoardFilter: FC<OnlineBoardFilterProps> = ({
|
||||
initialDeparture,
|
||||
initialArrival,
|
||||
initialDate,
|
||||
initialTimeFrom,
|
||||
initialTimeTo,
|
||||
initialTab,
|
||||
initialFlightNumber,
|
||||
}) => {
|
||||
@@ -126,7 +138,10 @@ export const OnlineBoardFilter: FC<OnlineBoardFilterProps> = ({
|
||||
const [routeDate, setRouteDate] = useState<Date | null>(
|
||||
initialDate ? yyyymmddToDate(initialDate) : null,
|
||||
);
|
||||
const [timeRange, setTimeRange] = useState<[number, number]>([0, 1440]);
|
||||
const [timeRange, setTimeRange] = useState<[number, number]>([
|
||||
hhmmToMinutes(initialTimeFrom, 0),
|
||||
hhmmToMinutes(initialTimeTo, 1440),
|
||||
]);
|
||||
|
||||
const boardMinDate = useRef(getBoardMinDate()).current;
|
||||
const boardMaxDate = useRef(getBoardMaxDate()).current;
|
||||
|
||||
@@ -423,18 +423,24 @@ export const OnlineBoardSearchPage: FC<OnlineBoardSearchPageProps> = ({
|
||||
initialDeparture: params.departure,
|
||||
initialArrival: params.arrival,
|
||||
initialDate: params.date,
|
||||
...(params.timeFrom ? { initialTimeFrom: params.timeFrom } : {}),
|
||||
...(params.timeTo ? { initialTimeTo: params.timeTo } : {}),
|
||||
initialTab: "route" as const,
|
||||
}
|
||||
: params.type === "departure"
|
||||
? {
|
||||
initialDeparture: params.station,
|
||||
initialDate: params.date,
|
||||
...(params.timeFrom ? { initialTimeFrom: params.timeFrom } : {}),
|
||||
...(params.timeTo ? { initialTimeTo: params.timeTo } : {}),
|
||||
initialTab: "route" as const,
|
||||
}
|
||||
: params.type === "arrival"
|
||||
? {
|
||||
initialArrival: params.station,
|
||||
initialDate: params.date,
|
||||
...(params.timeFrom ? { initialTimeFrom: params.timeFrom } : {}),
|
||||
...(params.timeTo ? { initialTimeTo: params.timeTo } : {}),
|
||||
initialTab: "route" as const,
|
||||
}
|
||||
: params.type === "flight"
|
||||
|
||||
Reference in New Issue
Block a user