diff --git a/src/features/online-board/components/OnlineBoardFilter.tsx b/src/features/online-board/components/OnlineBoardFilter.tsx index f5593b13..d20a4011 100644 --- a/src/features/online-board/components/OnlineBoardFilter.tsx +++ b/src/features/online-board/components/OnlineBoardFilter.tsx @@ -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 = ({ initialDeparture, initialArrival, initialDate, + initialTimeFrom, + initialTimeTo, initialTab, initialFlightNumber, }) => { @@ -126,7 +138,10 @@ export const OnlineBoardFilter: FC = ({ const [routeDate, setRouteDate] = useState( 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; diff --git a/src/features/online-board/components/OnlineBoardSearchPage.tsx b/src/features/online-board/components/OnlineBoardSearchPage.tsx index 4ebe7734..6da64994 100644 --- a/src/features/online-board/components/OnlineBoardSearchPage.tsx +++ b/src/features/online-board/components/OnlineBoardSearchPage.tsx @@ -423,18 +423,24 @@ export const OnlineBoardSearchPage: FC = ({ 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"