fix(roadtrip): the booking a terminal opens has somewhere to open

The day panel owns the transport detail dialog, and in road trip mode the
day panel is not mounted: a terminal row, a ride pill and a map endpoint all
set the booking to show and nothing showed it. The rail brings the dialog
along now. Also drops a translation key nothing read.
This commit is contained in:
Maurice
2026-09-21 16:17:49 +02:00
parent fa35966ab8
commit 0b4230ff4c
25 changed files with 16 additions and 26 deletions
+14 -1
View File
@@ -10,6 +10,7 @@ import { TripRouteOverviewPill, TripRouteOverviewPanel } from '../components/Map
import { DawarichTrailPill } from '../components/Map/DawarichTrailPill'
import { getCached, fetchPhoto } from '../services/photoService'
import DayPlanSidebar from '../components/Planner/DayPlanSidebar'
import { DayPlanSidebarTransportDetailModal } from '../components/Planner/DayPlanSidebarTransportDetailModal'
import RoadtripModeSwitch from '../components/Roadtrip/RoadtripModeSwitch'
import TripLoadingSplash from '../components/shared/TripLoadingSplash'
import PlacesSidebar from '../components/Planner/PlacesSidebar'
@@ -254,7 +255,7 @@ function TripPlannerPageDesktop(): React.ReactElement | null {
// Page = wiring container: the entire planner state machine (store, tabs,
// selection, CRUD handlers with undo, map filters, splash) lives in the hook.
const {
tripId, navigate, toast, t, language, placesPhotosEnabled,
tripId, navigate, toast, t, language, locale, settings, placesPhotosEnabled,
trip, days, places, assignments, packingItems, todoItems, categories, reservations, budgetItems, files,
selectedDayId, isLoading, tripActions, can, canUploadFiles,
pushUndo, undo, canUndo, lastActionLabel, handleUndo,
@@ -618,6 +619,18 @@ function TripPlannerPageDesktop(): React.ReactElement | null {
collapsedDayIds={collapsedRoadtripDays}
onToggleDay={toggleRoadtripDay}
/>
{/* The booking a terminal, a ride pill or a map endpoint opens. Under
Days the day panel owns this dialog; here the day panel is not
mounted, so the rail has to bring it along (#2428). */}
<DayPlanSidebarTransportDetailModal
transportDetail={mapTransportDetail}
setTransportDetail={setMapTransportDetail}
onNavigateToFiles={() => handleTabChange('dateien')}
onEdit={can('day_edit', trip) ? (reservation) => { setMapTransportDetail(null); setEditingTransport(reservation); setTransportModalDayId(reservation.day_id ?? null); setShowTransportModal(true) } : undefined}
t={t}
locale={locale}
timeFormat={settings.time_format || '24h'}
/>
</LazyPanel>
) : (
<DayPlanSidebar
@@ -95,7 +95,7 @@ export function useTripPlanner() {
const tripId = id ? Number(id) : Number.NaN
const navigate = useNavigate()
const toast = useToast()
const { t, language } = useTranslation()
const { t, language, locale } = useTranslation()
const { settings } = useSettingsStore()
const roadtripSettings = useRoadtripSettings(s => s, tripId)
// trip-page plugins mount as tabs inside this trip planner (tripId-scoped).
@@ -2613,7 +2613,7 @@ export function useTripPlanner() {
}, [isLoading, trip])
return {
tripId, navigate, toast, t, language, settings, placesPhotosEnabled,
tripId, navigate, toast, t, language, locale, settings, placesPhotosEnabled,
trip, days, places, assignments, storedAssignments, packingItems, todoItems, categories, reservations, budgetItems, files,
selectedDayId, isLoading, tripActions, can, canUploadFiles,
pushUndo, undo, canUndo, lastActionLabel, handleUndo,
-1
View File
@@ -267,6 +267,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'المغادرة {time}',
'roadtrip.ride.arrival': 'الوصول {time}',
'roadtrip.ride.open': 'فتح الحجز',
'roadtrip.ride.beThere': 'الحضور قبل {time}',
};
export default roadtrip;
-1
View File
@@ -272,6 +272,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Loc\'hañ {time}',
'roadtrip.ride.arrival': 'Erruout {time}',
'roadtrip.ride.open': 'Digeriñ ar mirout',
'roadtrip.ride.beThere': 'Bezañ eno a-raok {time}',
};
export default roadtrip;
-1
View File
@@ -275,6 +275,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Sortida {time}',
'roadtrip.ride.arrival': 'Arribada {time}',
'roadtrip.ride.open': 'Obre la reserva',
'roadtrip.ride.beThere': 'Sigues-hi abans de les {time}',
};
export default roadtrip;
-1
View File
@@ -270,6 +270,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Odjezd {time}',
'roadtrip.ride.arrival': 'Příjezd {time}',
'roadtrip.ride.open': 'Otevřít rezervaci',
'roadtrip.ride.beThere': 'Být na místě do {time}',
};
export default roadtrip;
-1
View File
@@ -269,6 +269,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Abfahrt {time}',
'roadtrip.ride.arrival': 'Ankunft {time}',
'roadtrip.ride.open': 'Buchung öffnen',
'roadtrip.ride.beThere': 'Bis {time} da sein',
};
export default roadtrip;
-1
View File
@@ -267,6 +267,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Departure {time}',
'roadtrip.ride.arrival': 'Arrival {time}',
'roadtrip.ride.open': 'Open booking',
'roadtrip.ride.beThere': 'Be there by {time}',
};
export default roadtrip;
-1
View File
@@ -274,6 +274,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Salida {time}',
'roadtrip.ride.arrival': 'Llegada {time}',
'roadtrip.ride.open': 'Abrir reserva',
'roadtrip.ride.beThere': 'Estar allí antes de las {time}',
};
export default roadtrip;
-1
View File
@@ -274,6 +274,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Départ {time}',
'roadtrip.ride.arrival': 'Arrivée {time}',
'roadtrip.ride.open': 'Ouvrir la réservation',
'roadtrip.ride.beThere': 'Être sur place avant {time}',
};
export default roadtrip;
-1
View File
@@ -276,6 +276,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Αναχώρηση {time}',
'roadtrip.ride.arrival': 'Άφιξη {time}',
'roadtrip.ride.open': 'Άνοιγμα κράτησης',
'roadtrip.ride.beThere': 'Να είστε εκεί μέχρι τις {time}',
};
export default roadtrip;
-1
View File
@@ -271,6 +271,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Indulás {time}',
'roadtrip.ride.arrival': 'Érkezés {time}',
'roadtrip.ride.open': 'Foglalás megnyitása',
'roadtrip.ride.beThere': 'Legyél ott {time}-ig',
};
export default roadtrip;
-1
View File
@@ -274,6 +274,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Berangkat {time}',
'roadtrip.ride.arrival': 'Tiba {time}',
'roadtrip.ride.open': 'Buka pemesanan',
'roadtrip.ride.beThere': 'Sudah di sana sebelum {time}',
};
export default roadtrip;
-1
View File
@@ -274,6 +274,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Partenza {time}',
'roadtrip.ride.arrival': 'Arrivo {time}',
'roadtrip.ride.open': 'Apri prenotazione',
'roadtrip.ride.beThere': 'Essere lì entro le {time}',
};
export default roadtrip;
-1
View File
@@ -269,6 +269,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': '出発 {time}',
'roadtrip.ride.arrival': '到着 {time}',
'roadtrip.ride.open': '予約を開く',
'roadtrip.ride.beThere': '{time} までに到着',
};
export default roadtrip;
-1
View File
@@ -267,6 +267,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': '출발 {time}',
'roadtrip.ride.arrival': '도착 {time}',
'roadtrip.ride.open': '예약 열기',
'roadtrip.ride.beThere': '{time}까지 도착',
};
export default roadtrip;
-1
View File
@@ -273,6 +273,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Vertrek {time}',
'roadtrip.ride.arrival': 'Aankomst {time}',
'roadtrip.ride.open': 'Boeking openen',
'roadtrip.ride.beThere': 'Uiterlijk om {time} aanwezig zijn',
};
export default roadtrip;
-1
View File
@@ -271,6 +271,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Odjazd {time}',
'roadtrip.ride.arrival': 'Przyjazd {time}',
'roadtrip.ride.open': 'Otwórz rezerwację',
'roadtrip.ride.beThere': 'Być na miejscu do {time}',
};
export default roadtrip;
-1
View File
@@ -273,6 +273,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Отправление {time}',
'roadtrip.ride.arrival': 'Прибытие {time}',
'roadtrip.ride.open': 'Открыть бронирование',
'roadtrip.ride.beThere': 'Быть на месте к {time}',
};
export default roadtrip;
-1
View File
@@ -270,6 +270,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Avgång {time}',
'roadtrip.ride.arrival': 'Ankomst {time}',
'roadtrip.ride.open': 'Öppna bokning',
'roadtrip.ride.beThere': 'Var på plats senast {time}',
};
export default roadtrip;
-1
View File
@@ -273,6 +273,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Kalkış {time}',
'roadtrip.ride.arrival': 'Varış {time}',
'roadtrip.ride.open': 'Rezervasyonu aç',
'roadtrip.ride.beThere': '{time} itibarıyla orada olun',
};
export default roadtrip;
-1
View File
@@ -272,6 +272,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Відправлення {time}',
'roadtrip.ride.arrival': 'Прибуття {time}',
'roadtrip.ride.open': 'Відкрити бронювання',
'roadtrip.ride.beThere': 'Бути на місці до {time}',
};
export default roadtrip;
-1
View File
@@ -271,6 +271,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': 'Khởi hành {time}',
'roadtrip.ride.arrival': 'Đến nơi {time}',
'roadtrip.ride.open': 'Mở đặt chỗ',
'roadtrip.ride.beThere': 'Có mặt trước {time}',
};
export default roadtrip;
-1
View File
@@ -258,6 +258,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': '出發 {time}',
'roadtrip.ride.arrival': '抵達 {time}',
'roadtrip.ride.open': '開啟預訂',
'roadtrip.ride.beThere': '請於 {time} 前抵達',
};
export default roadtrip;
-1
View File
@@ -259,6 +259,5 @@ const roadtrip: TranslationStrings = {
'roadtrip.ride.departure': '出发 {time}',
'roadtrip.ride.arrival': '到达 {time}',
'roadtrip.ride.open': '打开预订',
'roadtrip.ride.beThere': '请于 {time} 前到达',
};
export default roadtrip;