Merged in feat/sw-2873-move-selecthotel-to-booking-flow (pull request #2727)
feat(SW-2873): Move select-hotel to booking flow * crude setup of select-hotel in partner-sas * wip * Fix linting * restructure tracking files * Remove dependency on trpc in tracking hooks * Move pageview tracking to common * Fix some lint and import issues * Add AlternativeHotelsPage * Add SelectHotelMapPage * Add AlternativeHotelsMapPage * remove next dependency in tracking store * Remove dependency on react in tracking hooks * move isSameBooking to booking-flow * Inject searchParamsComparator into tracking store * Move useTrackHardNavigation to common * Move useTrackSoftNavigation to common * Add TrackingSDK to partner-sas * call serverclient in layout * Remove unused css * Update types * Move HotelPin type * Fix todos * Merge branch 'master' into feat/sw-2873-move-selecthotel-to-booking-flow * Merge branch 'master' into feat/sw-2873-move-selecthotel-to-booking-flow * Fix component Approved-by: Joakim Jäderberg
This commit is contained in:
68
packages/booking-flow/lib/utils/isSameBooking.ts
Normal file
68
packages/booking-flow/lib/utils/isSameBooking.ts
Normal file
@@ -0,0 +1,68 @@
|
||||
import isEqual from "fast-deep-equal"
|
||||
|
||||
import {
|
||||
parseBookingWidgetSearchParams,
|
||||
searchParamsToRecord,
|
||||
type SelectRateBooking,
|
||||
} from "./url"
|
||||
|
||||
import type { BookingWidgetSearchData } from "../components/BookingWidget"
|
||||
|
||||
/**
|
||||
* Parses and compares booking widget search parameters
|
||||
* @param param0
|
||||
* @returns true if the searches are the same
|
||||
*/
|
||||
export function isSameBookingWidgetParams({
|
||||
previousParams,
|
||||
currentParams,
|
||||
}: {
|
||||
previousParams: URLSearchParams
|
||||
currentParams: URLSearchParams
|
||||
}) {
|
||||
const previousParamsObject = parseBookingWidgetSearchParams(
|
||||
searchParamsToRecord(previousParams)
|
||||
)
|
||||
const currentParamsObject = parseBookingWidgetSearchParams(
|
||||
searchParamsToRecord(currentParams)
|
||||
)
|
||||
|
||||
if (!previousParamsObject && !currentParamsObject) return false
|
||||
if (!previousParamsObject || !currentParamsObject) return true
|
||||
|
||||
const isSame = isSameBooking(previousParamsObject, currentParamsObject)
|
||||
return !isSame
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares if two sets of select-rate searches are the same
|
||||
* @param prev
|
||||
* @param next
|
||||
* @returns
|
||||
*/
|
||||
export function isSameBooking(
|
||||
prev: (SelectRateBooking | BookingWidgetSearchData) & { errorCode?: string },
|
||||
next: (SelectRateBooking | BookingWidgetSearchData) & { errorCode?: string }
|
||||
) {
|
||||
const { rooms: prevRooms, errorCode: prevErrorCode, ...prevBooking } = prev
|
||||
|
||||
const prevRoomsWithoutRateCodes = prevRooms?.map(
|
||||
({ adults, childrenInRoom }) => ({ adults, childrenInRoom })
|
||||
)
|
||||
const { rooms: nextRooms, errorCode: nextErrorCode, ...nextBooking } = next
|
||||
|
||||
const nextRoomsWithoutRateCodes = nextRooms?.map(
|
||||
({ adults, childrenInRoom }) => ({ adults, childrenInRoom })
|
||||
)
|
||||
|
||||
return isEqual(
|
||||
{
|
||||
...prevBooking,
|
||||
rooms: prevRoomsWithoutRateCodes,
|
||||
},
|
||||
{
|
||||
...nextBooking,
|
||||
rooms: nextRoomsWithoutRateCodes,
|
||||
}
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user