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
69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
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,
|
|
}
|
|
)
|
|
}
|