From b8d5de6ca7a140f8d7f3b20b437fafd2fac10f67 Mon Sep 17 00:00:00 2001 From: gnezim Date: Fri, 17 Apr 2026 15:11:47 +0300 Subject: [PATCH] Use CityAutocomplete for OnlineBoardFilter Route tab departure + arrival --- .../components/OnlineBoardFilter.tsx | 79 ++++++------------- .../components/OnlineBoardStartPage.test.tsx | 13 +++ 2 files changed, 37 insertions(+), 55 deletions(-) diff --git a/src/features/online-board/components/OnlineBoardFilter.tsx b/src/features/online-board/components/OnlineBoardFilter.tsx index da085628..9a6eabc2 100644 --- a/src/features/online-board/components/OnlineBoardFilter.tsx +++ b/src/features/online-board/components/OnlineBoardFilter.tsx @@ -12,9 +12,9 @@ import { type FC, useState, useCallback, type FormEvent } from "react"; import { useNavigate, useParams } from "@modern-js/runtime/router"; import { Calendar } from "primereact/calendar"; import { Slider, type SliderChangeEvent } from "primereact/slider"; -import { AutoComplete, type AutoCompleteCompleteEvent } from "primereact/autocomplete"; import { useTranslation } from "@/i18n/provider.js"; -import { useCitySearch, type CitySuggestion } from "@/shared/hooks/useCitySearch.js"; +import { CityAutocomplete } from "@/ui/city-autocomplete/index.js"; +import { useDictionaries } from "@/shared/dictionaries/index.js"; import { buildOnlineBoardUrl } from "../url.js"; import "./OnlineBoardFilter.scss"; @@ -72,6 +72,7 @@ export const OnlineBoardFilter: FC = ({ const navigate = useNavigate(); const routeParams = useParams<{ lang: string }>(); const lang = routeParams.lang ?? "ru"; + const { dictionaries } = useDictionaries(lang); const [activeTab, setActiveTab] = useState(initialTab ?? "route"); @@ -83,34 +84,22 @@ export const OnlineBoardFilter: FC = ({ const [flightNumberError, setFlightNumberError] = useState(null); // Route fields - const [routeDeparture, setRouteDeparture] = useState(initialDeparture ?? ""); - const [routeArrival, setRouteArrival] = useState(initialArrival ?? ""); + const [routeDepartureCode, setRouteDepartureCode] = useState(initialDeparture ?? ""); + const [routeArrivalCode, setRouteArrivalCode] = useState(initialArrival ?? ""); const [routeDate, setRouteDate] = useState( initialDate ? yyyymmddToDate(initialDate) : new Date(), ); const [timeRange, setTimeRange] = useState<[number, number]>([0, 1440]); - // City autocomplete search - const { suggestions: routeDepSuggestions, search: searchRouteDep } = useCitySearch(); - const { suggestions: routeArrSuggestions, search: searchRouteArr } = useCitySearch(); - - const handleRouteDepSearch = useCallback((event: AutoCompleteCompleteEvent) => { - void searchRouteDep(event.query); - }, [searchRouteDep]); - - const handleRouteArrSearch = useCallback((event: AutoCompleteCompleteEvent) => { - void searchRouteArr(event.query); - }, [searchRouteArr]); - const handleTabClick = useCallback((tab: AccordionTab) => { setActiveTab((prev) => (prev === tab ? prev : tab)); }, []); const handleExchange = useCallback(() => { - const prevDep = routeDeparture; - setRouteDeparture(routeArrival); - setRouteArrival(prevDep); - }, [routeDeparture, routeArrival]); + const prevDep = routeDepartureCode; + setRouteDepartureCode(routeArrivalCode); + setRouteArrivalCode(prevDep); + }, [routeDepartureCode, routeArrivalCode]); const handleFlightSubmit = useCallback( (e: FormEvent) => { @@ -138,17 +127,13 @@ export const OnlineBoardFilter: FC = ({ if (!routeDate) return; const dateParam = dateToYyyymmdd(routeDate); - const depCode = typeof routeDeparture === "string" - ? routeDeparture.trim().toUpperCase() - : routeDeparture.code; - const arrCode = typeof routeArrival === "string" - ? routeArrival.trim().toUpperCase() - : routeArrival.code; + const depCode = routeDepartureCode.trim().toUpperCase(); + const arrCode = routeArrivalCode.trim().toUpperCase(); if (!depCode || !arrCode) return; const url = buildOnlineBoardUrl({ type: "route", departure: depCode, arrival: arrCode, date: dateParam }); void navigate(`/${lang}/${url}`); }, - [routeDeparture, routeArrival, routeDate, navigate, lang], + [routeDepartureCode, routeArrivalCode, routeDate, navigate, lang], ); return ( @@ -275,21 +260,13 @@ export const OnlineBoardFilter: FC = ({
- - setRouteDeparture(e.value as CitySuggestion | string)} +
@@ -305,21 +282,13 @@ export const OnlineBoardFilter: FC = ({
- - setRouteArrival(e.value as CitySuggestion | string)} +
diff --git a/src/features/online-board/components/OnlineBoardStartPage.test.tsx b/src/features/online-board/components/OnlineBoardStartPage.test.tsx index 97a24eae..726b5a53 100644 --- a/src/features/online-board/components/OnlineBoardStartPage.test.tsx +++ b/src/features/online-board/components/OnlineBoardStartPage.test.tsx @@ -51,6 +51,19 @@ vi.mock("@/shared/hooks/useSearchHistory.js", () => ({ useSearchHistory: () => ({ items: [], add: vi.fn(), clear: vi.fn() }), })); +vi.mock("@/shared/dictionaries/index.js", () => ({ + useDictionaries: () => ({ dictionaries: null, loading: false, error: null }), +})); + +vi.mock("@/ui/city-autocomplete/index.js", () => ({ + CityAutocomplete: (props: Record) => ( + + ), +})); + // --------------------------------------------------------------------------- // Pure function: buildPopularRequestQueryParams // ---------------------------------------------------------------------------