From e6663138656144ab9200d2b86b977ec44cf0aa48 Mon Sep 17 00:00:00 2001 From: Maurice Date: Wed, 24 Jun 2026 23:29:59 +0200 Subject: [PATCH] fix(extract): refresh accommodations after a booking import A freshly imported hotel links to an accommodation that lives outside the trip store, so loadTrip alone left the reservation edit modal with blank place/date fields. Reload the accommodations list once the import finishes. --- client/src/components/Planner/BookingImportModal.tsx | 9 ++++++++- client/src/pages/TripPlannerPage.tsx | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/client/src/components/Planner/BookingImportModal.tsx b/client/src/components/Planner/BookingImportModal.tsx index e8b38e021..1b26561c4 100644 --- a/client/src/components/Planner/BookingImportModal.tsx +++ b/client/src/components/Planner/BookingImportModal.tsx @@ -13,6 +13,10 @@ interface BookingImportModalProps { onClose: () => void tripId: number pushUndo?: (label: string, undoFn: () => Promise | void) => void + // Fired after a successful import so the page can refresh state that lives + // outside the trip store — notably the accommodations list a hotel booking + // links to (loadTrip alone leaves it stale, so the edit modal shows blanks). + onImported?: () => void } const ACCEPTED_EXTS = ['.eml', '.pdf', '.pkpass', '.html', '.htm', '.txt'] @@ -50,7 +54,7 @@ function formatDateTime(iso: unknown): string { return [date, time].filter(Boolean).join(' ') } -export default function BookingImportModal({ isOpen, onClose, tripId, pushUndo }: BookingImportModalProps) { +export default function BookingImportModal({ isOpen, onClose, tripId, pushUndo, onImported }: BookingImportModalProps) { const { t } = useTranslation() const toast = useToast() const loadTrip = useTripStore((s) => s.loadTrip) @@ -181,6 +185,9 @@ export default function BookingImportModal({ isOpen, onClose, tripId, pushUndo } const result = await reservationsApi.importBookingConfirm(tripId, toImport) const created = result.created ?? [] await loadTrip(tripId) + // Refresh out-of-store state (accommodations) so a freshly imported hotel + // resolves its place/date range in the reservation edit modal. + onImported?.() if (created.length > 0) { pushUndo?.(t('undo.importBooking'), async () => { diff --git a/client/src/pages/TripPlannerPage.tsx b/client/src/pages/TripPlannerPage.tsx index 50af8c9ad..f366aeee4 100644 --- a/client/src/pages/TripPlannerPage.tsx +++ b/client/src/pages/TripPlannerPage.tsx @@ -713,7 +713,7 @@ export default function TripPlannerPage(): React.ReactElement | null { onSaved={() => { setBookingExpense(null); loadBudgetItems(tripId) }} /> )} - setShowBookingImport(false)} tripId={tripId} pushUndo={pushUndo} /> + setShowBookingImport(false)} tripId={tripId} pushUndo={pushUndo} onImported={loadAccommodations} /> setShowAirTrailImport(false)} tripId={tripId} pushUndo={pushUndo} />