diff --git a/src/features/schedule/components/ScheduleStartPage.tsx b/src/features/schedule/components/ScheduleStartPage.tsx index b311088c..6b323082 100644 --- a/src/features/schedule/components/ScheduleStartPage.tsx +++ b/src/features/schedule/components/ScheduleStartPage.tsx @@ -7,7 +7,7 @@ * @module */ -import { type FC, useState, useCallback, type FormEvent } from "react"; +import { type FC, useState, useCallback, useEffect, type FormEvent } from "react"; import { useNavigate } from "@modern-js/runtime/router"; import { useLocale } from "@/i18n/useLocale.js"; import { Calendar } from "primereact/calendar"; @@ -92,6 +92,36 @@ export const ScheduleStartPage: FC = () => { const [departureAirport, setDepartureAirport] = useState(prefill.departure ?? ""); const [arrivalAirport, setArrivalAirport] = useState(prefill.arrival ?? ""); + + // Prefill arrives as a bare IATA code ("MOW"). Once dictionaries are + // loaded, upgrade each state slot to a `{code, name}` CitySuggestion + // so the PrimeReact AutoComplete renders "Москва" rather than the raw + // code. Mirrors Angular's CityAutocomplete.writeValue + getCityOrAirport. + useEffect(() => { + if (!dictionaries) return; + const resolve = (code: string): CitySuggestion | null => { + const upper = code.toUpperCase(); + const city = dictionaries.cityByCode.get(upper); + if (city) return { code: city.code, name: city.name }; + const airport = dictionaries.airportByCode.get(upper); + if (airport) { + const parentCode = airport.city_code?.toUpperCase(); + const parent = parentCode + ? dictionaries.cityByCode.get(parentCode) + : null; + if (parent) return { code: parent.code, name: parent.name }; + } + return null; + }; + setDepartureAirport((current) => { + if (typeof current !== "string" || !current) return current; + return resolve(current) ?? current; + }); + setArrivalAirport((current) => { + if (typeof current !== "string" || !current) return current; + return resolve(current) ?? current; + }); + }, [dictionaries]); // Start blank to match Angular's `ДД.ММ.ГГГГ - ДД.ММ.ГГГГ` placeholder // (the "current week" pre-fill was a React-only convenience that // pulled the date input out of parity). Submit handler defaults to