From 4545de877fa70b4e896d2488f2f79724cc8a6380 Mon Sep 17 00:00:00 2001 From: Christel Westerberg Date: Thu, 28 Nov 2024 15:53:07 +0100 Subject: [PATCH] fix: normalize format of dates when setting them in middleware --- components/BookingWidget/Client.tsx | 21 +++++++++++++-------- lib/dt.ts | 2 ++ middlewares/dateFormat.ts | 12 +++--------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/components/BookingWidget/Client.tsx b/components/BookingWidget/Client.tsx index 922522742..84ac08cba 100644 --- a/components/BookingWidget/Client.tsx +++ b/components/BookingWidget/Client.tsx @@ -66,11 +66,16 @@ export default function BookingWidgetClient({ const reqFromDate = bookingWidgetSearchData?.fromDate?.toString() const reqToDate = bookingWidgetSearchData?.toDate?.toString() + const parsedFromDate = reqFromDate ? dt(reqFromDate) : undefined + const parsedToDate = reqToDate ? dt(reqToDate) : undefined + + const now = dt() + const isDateParamValid = - reqFromDate && - reqToDate && - dt(reqFromDate).isAfter(dt().subtract(1, "day")) && - dt(reqToDate).isAfter(dt(reqFromDate)) + parsedFromDate && + parsedToDate && + parsedFromDate.isSameOrAfter(now, "day") && + parsedToDate.isAfter(parsedFromDate) const selectedLocation = bookingWidgetSearchData ? getLocationObj( @@ -97,11 +102,11 @@ export default function BookingWidgetClient({ // UTC is required to handle requests from far away timezones https://scandichotels.atlassian.net/browse/SWAP-6375 & PET-507 // This is specifically to handle timezones falling in different dates. fromDate: isDateParamValid - ? dt(bookingWidgetSearchData?.fromDate).format("YYYY-M-D") - : dt().utc().format("YYYY-M-D"), + ? parsedFromDate.format("YYYY-MM-DD") + : now.utc().format("YYYY-MM-DD"), toDate: isDateParamValid - ? dt(bookingWidgetSearchData?.toDate).format("YYYY-M-D") - : dt().utc().add(1, "day").format("YYYY-M-D"), + ? parsedToDate.format("YYYY-MM-DD") + : now.utc().add(1, "day").format("YYYY-MM-DD"), }, bookingCode: "", redemption: false, diff --git a/lib/dt.ts b/lib/dt.ts index 5cbe77692..ca41dfbf2 100644 --- a/lib/dt.ts +++ b/lib/dt.ts @@ -5,6 +5,7 @@ import "dayjs/locale/sv" import d from "dayjs" import advancedFormat from "dayjs/plugin/advancedFormat" +import isSameOrAfter from "dayjs/plugin/isSameOrAfter" import isToday from "dayjs/plugin/isToday" import relativeTime from "dayjs/plugin/relativeTime" import timezone from "dayjs/plugin/timezone" @@ -62,5 +63,6 @@ d.extend(isToday) d.extend(relativeTime) d.extend(timezone) d.extend(utc) +d.extend(isSameOrAfter) export const dt = d diff --git a/middlewares/dateFormat.ts b/middlewares/dateFormat.ts index d2f3c584f..7906e13e5 100644 --- a/middlewares/dateFormat.ts +++ b/middlewares/dateFormat.ts @@ -19,18 +19,12 @@ function normalizeDate(date: string): string { } export const middleware: NextMiddleware = (request) => { - const url = request.nextUrl + const url = request.nextUrl.clone() const { searchParams } = url if ( - !!( - searchParams.has("fromDate") && - searchParams.get("fromDate")!.match(legacyDatePattern) - ) || - !!( - searchParams.has("toDate") && - searchParams.get("toDate")!.match(legacyDatePattern) - ) + legacyDatePattern.test(searchParams.get("fromDate")!) || + legacyDatePattern.test(searchParams.get("toDate")!) ) { const fromDate = searchParams.get("fromDate")! url.searchParams.set("fromDate", normalizeDate(fromDate))