fix(planner): let a booking's day follow its date when edited (#1237)

Preserving the old day_id on edit left a re-dated booking on its previous start
day while end_day_id followed the new date, so it spanned both. Stop sending
day_id from the edit modal entirely - the server derives both ends from the
booking's date (and keeps the current day when there is no date), so a re-dated
booking moves cleanly to the matching day.
This commit is contained in:
Maurice
2026-06-17 22:38:58 +02:00
parent ea7f7fd9f3
commit 6ab4989c38
3 changed files with 34 additions and 11 deletions
+5 -7
View File
@@ -1160,7 +1160,7 @@ describe('TripPlannerPage', () => {
});
describe('FE-PAGE-PLANNER-041: handleSaveReservation edit path covers update reservation', () => {
it('preserves the reservation day_id on edit so it stays in the Plan (#1237)', async () => {
it('does not force a day_id on edit so the server keeps/derives it (#1237)', async () => {
vi.useFakeTimers();
seedTripStore({ id: 42 });
@@ -1196,12 +1196,10 @@ describe('TripPlannerPage', () => {
});
});
// The booking must keep its own day_id (not be nulled to the selected day).
expect(updateReservationSpy).toHaveBeenCalledWith(
expect.anything(),
1,
expect.objectContaining({ day_id: 7 }),
);
// The client must NOT send a day_id (no forcing to the selected day, no
// stale value) — the server keeps/derives it from the booking's date.
expect(updateReservationSpy).toHaveBeenCalled();
expect(updateReservationSpy.mock.calls[0][2]).not.toHaveProperty('day_id');
});
});
@@ -568,10 +568,12 @@ export function useTripPlanner() {
const handleSaveReservation = async (data: Record<string, string | number | null> & { title: string }) => {
try {
if (editingReservation) {
// Keep the reservation on its own day. Forcing selectedDayId here dropped
// the booking out of the Plan when edited from the Book tab (no day
// selected -> selectedDayId null -> day_id nulled).
const r = await tripActions.updateReservation(tripId, editingReservation.id, { ...data, day_id: editingReservation.day_id ?? null })
// Don't force a day here. The old code pinned it to the (often empty)
// selected day, which dropped the booking out of the Plan; preserving the
// old day_id instead left it stale when the date changed. Omitting it lets
// the server derive the day from the booking's date, or keep the current
// one when there is no date.
const r = await tripActions.updateReservation(tripId, editingReservation.id, data)
toast.success(t('trip.toast.reservationUpdated'))
setShowReservationModal(false)
setEditingReservation(null)