Keep online board time range in sync

This commit is contained in:
2026-05-05 22:36:59 +03:00
parent f08ed8b206
commit 0960b739dd
2 changed files with 46 additions and 1 deletions
@@ -271,6 +271,33 @@ describe("OnlineBoardFilter time slider 1h minimum gap per TZ §4.1.9 Tables
const value = screen.getByTestId("time-selector").querySelector(".time-selector__value");
expect(value?.textContent).toBe("23:00 — 24:00");
});
it("TIRREDESIGN-11: syncs the slider label when URL time params change", () => {
const { rerender } = render(
<OnlineBoardFilter
initialTab="route"
initialTimeFrom="0900"
initialTimeTo="2100"
/>,
);
const value = screen.getByTestId("time-selector").querySelector(".time-selector__value");
expect(value?.textContent).toBe("09:00 — 21:00");
rerender(
<OnlineBoardFilter
initialTab="route"
initialTimeFrom="1400"
initialTimeTo="1800"
/>,
);
expect(value?.textContent).toBe("14:00 — 18:00");
rerender(<OnlineBoardFilter initialTab="route" />);
expect(value?.textContent).toBe("00:00 — 24:00");
});
});
describe("OnlineBoardFilter submit lock", () => {
@@ -344,6 +344,8 @@ export const OnlineBoardFilter: FC<OnlineBoardFilterProps> = ({
date: initialDate,
tab: initialTab,
flightNumber: initialFlightNumber,
timeFrom: initialTimeFrom,
timeTo: initialTimeTo,
});
useEffect(() => {
const prev = lastInitialRef.current;
@@ -365,14 +367,30 @@ export const OnlineBoardFilter: FC<OnlineBoardFilterProps> = ({
if (prev.flightNumber !== initialFlightNumber) {
setFlightNumber(initialFlightNumber ?? "");
}
if (prev.timeFrom !== initialTimeFrom || prev.timeTo !== initialTimeTo) {
setTimeRange([
hhmmToMinutes(initialTimeFrom, 0),
hhmmToMinutes(initialTimeTo, 1440),
]);
}
lastInitialRef.current = {
departure: initialDeparture,
arrival: initialArrival,
date: initialDate,
tab: initialTab,
flightNumber: initialFlightNumber,
timeFrom: initialTimeFrom,
timeTo: initialTimeTo,
};
}, [initialDeparture, initialArrival, initialDate, initialTab, initialFlightNumber]);
}, [
initialDeparture,
initialArrival,
initialDate,
initialTab,
initialFlightNumber,
initialTimeFrom,
initialTimeTo,
]);
const handleTabClick = useCallback((tab: AccordionTab) => {
setActiveTab((prev) => (prev === tab ? prev : tab));