{"version":3,"file":"static/chunks/423-bb83968c40f9b9a6.js","mappings":"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","sources":["webpack://_N_E/./components/compare-hotels/hooks/use-get-compare-hotels.ts","webpack://_N_E/./components/compare-hotels/compare-skeleton.tsx","webpack://_N_E/./components/compare-hotels/compare-modal.tsx","webpack://_N_E/./components/compare-hotels/compare-bar.tsx","webpack://_N_E/./components/compare-hotels/compare-hotel-utils.ts","webpack://_N_E/./components/compare-hotels/compare-toggle.tsx","webpack://_N_E/./components/compare-hotels/feature-tool-tip.tsx","webpack://_N_E/./components/currency-converter/currency-converter.tsx","webpack://_N_E/./hooks/use-suggested-filters.ts","webpack://_N_E/./components/filters/suggested-filters.tsx","webpack://_N_E/./components/hotel-counter/hotel-counter.tsx","webpack://_N_E/./components/hotel-counter/index.ts","webpack://_N_E/./components/list-view/log-in-banner/log-in-banner.tsx","webpack://_N_E/./components/locations-page/locations-page.utils.ts","webpack://_N_E/./components/locations-page/locations-page-heading.tsx","webpack://_N_E/./components/hotel-search-result-summary/hotel-search-result-summary.tsx","webpack://_N_E/./components/info-message-banner/info-message-banner.tsx","webpack://_N_E/./components/list-view/list-view-utils/list-view-brand-banner.utils.ts","webpack://_N_E/./components/list-view/list-view-brand-banner/list-view-brand-banner.tsx","webpack://_N_E/./components/list-view/list-view-brand-banner/index.ts","webpack://_N_E/./components/age-based-modal/age-based-modal-utils.ts","webpack://_N_E/./components/age-based-modal/age-based-modal.tsx","webpack://_N_E/./components/age-based-modal/index.ts","webpack://_N_E/./components/list-view/list-view-utils/list-view.utils.ts","webpack://_N_E/./hooks/use-get-visible-in-bound-hotels.ts","webpack://_N_E/./components/carousel/carousel.tsx","webpack://_N_E/./components/hotel-card/why-property-mvt/why-property-skeleton.tsx","webpack://_N_E/./components/hotel-card/why-property-mvt/why-property.tsx","webpack://_N_E/./components/hotel-card/why-property-mvt/why-property-accordion.tsx","webpack://_N_E/./components/compare-hotels/compare-checkbox.tsx","webpack://_N_E/./components/hotel-card/key-hotel-amenity-info.tsx","webpack://_N_E/./components/hotel-card/hotel-card.tsx","webpack://_N_E/./components/hotel-card/hotel-card-cta-skeleton.tsx","webpack://_N_E/./components/hotel-card/hotel-card-skeleton.tsx","webpack://_N_E/./components/hotel-card/hotel-cards.tsx","webpack://_N_E/./components/list-view/list-view.tsx","webpack://_N_E/./components/map-list-toggle-button/map-list-toggle-button.tsx","webpack://_N_E/./components/zoom-in-for-pricing/zoom-in-for-pricing.tsx","webpack://_N_E/./components/zoom-in-for-pricing/index.ts","webpack://_N_E/./components/map/map.context.tsx","webpack://_N_E/./components/map/map.info-window.tsx","webpack://_N_E/./components/map/map.marker.tsx","webpack://_N_E/./components/map/map.static-marker.tsx","webpack://_N_E/./components/map/map.markers.tsx","webpack://_N_E/../../libs/osc/map/src/lib/info-window/map-info-window.tsx","webpack://_N_E/../../libs/osc/map/src/lib/info-window/index.ts","webpack://_N_E/../../libs/osc/map/src/lib/index.ts","webpack://_N_E/../../libs/osc/map/src/index.ts","webpack://_N_E/./components/map/map.markers.search.tsx","webpack://_N_E/./components/map/map.base.tsx","webpack://_N_E/./components/map/map.provider.tsx","webpack://_N_E/./components/map/map.tsx","webpack://_N_E/./components/map/map.markers.locations.tsx","webpack://_N_E/./components/map/map-block.tsx","webpack://_N_E/./components/sort-by-drop-down/dropdown-ui.tsx","webpack://_N_E/./components/sort-by-drop-down/sort-by-drop-down.tsx","webpack://_N_E/./components/sort-by-drop-down/index.ts","webpack://_N_E/./components/use-points/display-points-mvt/points-message.tsx","webpack://_N_E/./components/login-modal/login-modal.tsx","webpack://_N_E/./components/use-points/display-points-mvt/display-points.tsx","webpack://_N_E/./components/use-points/use-points.tsx","webpack://_N_E/./hooks/use-hotel-summary-options/utils/filter-state-country-brand-hashed-hotels.ts","webpack://_N_E/./hooks/use-hotel-summary-options/utils/generate-hotel-summary-options-query-array.ts","webpack://_N_E/./utils/get-bounds-nodes/get-bounds-nodes.ts","webpack://_N_E/./hooks/use-hotel-summary-options/use-quad-nodes.ts","webpack://_N_E/./hooks/use-hotel-summary-options/use-blob.ts","webpack://_N_E/./hooks/use-hotel-summary-options/use-hotel-summary-options.ts","webpack://_N_E/./hooks/use-vertical-space-MVT.ts","webpack://_N_E/../../libs/osc/pagination/src/lib/pagination.tsx","webpack://_N_E/../../libs/osc/pagination/src/index.ts","webpack://_N_E/../../libs/utilities/images/src/lib/get-aspect-ratio-url.ts","webpack://_N_E/../../libs/utilities/images/src/index.ts","webpack://_N_E/./components/map/map.module.css"],"sourcesContent":["import { keepPreviousData, useQueries } from '@tanstack/react-query';\nimport { HotelDocument } from '@dx-ui/queries-dx-shop-search-ui';\nimport type { HotelQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { getMPAHotelRate } from '../../hotel-card/utils/hotel-mpa-rate-utils';\nimport {\n getHotelLeadRateInfo,\n type HotelCardData,\n} from '../../hotel-card/utils/hotel-lead-rate-utils';\nimport { useAppState } from '../../../providers/app-provider';\nimport { useRenovationChip, useWrappedRouter } from '../../../hooks';\nimport { useCurrencyConversion } from '@dx-ui/osc-currency-converter';\nimport useShopMultiPropAvail from '../../../hooks/use-shop-multi-prop-avail/use-shop-multi-prop-avail';\nimport { useTranslation } from 'next-i18next';\nimport type { HotelBadgeTypes } from '../../hotel-card/hotel-badges';\nimport { getDistanceFromCenterFmt, type GoogleCoordinate } from '../../../utils';\nimport { getCompareImage, getParkingType, getRoomTypes } from '../compare-hotel-utils';\nimport type { HotelInfoAttributes } from '../../hotel-card/utils/hotel-info-utils';\nimport { isIndividualRoomLimitExceeded } from '../../hotel-card/utils/hotel-info-utils';\n\nexport const useGetCompareHotelsInfo = ({\n ctyhocns,\n centerCoordinate,\n displayHotelCount = 0,\n isEnabled,\n}: {\n ctyhocns: string[];\n centerCoordinate: GoogleCoordinate | null;\n displayHotelCount?: number;\n isEnabled?: boolean;\n}) => {\n const {\n hasConnectingRooms,\n selectedCurrency = '',\n shouldUsePoints = false,\n pageType,\n hasSpecialRate,\n } = useAppState();\n const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n const isDateFlex = queryParameters?.datesFlex || false;\n const { currenciesError, currenciesMap } = useCurrencyConversion();\n const { t } = useTranslation(['hotel-card', 'rate-name-cta', 'locations-page', 'compare-hotels']);\n const { isPointsExplorer, isDateSearch, isDreams } = pageType;\n const numOfChildren =\n queryParameters?.rooms\n .map((room) => room.children)\n .reduce((previous: number, current: number) => previous + current) || 0;\n\n const hotelsQueryArr = ctyhocns.map((ctyhocn) => {\n const variables = { language: 'en', ctyhocn, ratios: 'threeByTwo' };\n return {\n queryKey: [HotelDocument, variables],\n placeholderData: keepPreviousData,\n retry: 2,\n staleTime: 1000 * 60 * 10,\n enabled: isEnabled,\n };\n });\n const results = useQueries({\n queries: hotelsQueryArr,\n });\n const hotelData = results.map((hotel) => hotel.data as HotelQuery);\n const { renoChipConfig } = useRenovationChip();\n\n const { hashedData: priceInfoCollection, isLoading: isMPALoading } = useShopMultiPropAvail({\n ctyhocns: ctyhocns.map((ctyhocn) => ctyhocn),\n mpaConstraints: true,\n enabled: router.asPath.includes('/search/'),\n });\n const hotelInfo = hotelData.map((hotelData) => {\n const hotel = hotelData?.hotel;\n const isRenoHotel = renoChipConfig.includes(hotel?.ctyhocn);\n const currentHotelPriceInfo = hotel?.ctyhocn ? priceInfoCollection[hotel.ctyhocn] : undefined;\n const isIndividualRoomsOnly = isIndividualRoomLimitExceeded(\n currentHotelPriceInfo?.statusCode,\n queryParameters\n );\n let hotelRateInfo: HotelInfoAttributes = {};\n if ((!!priceInfoCollection && isDateSearch) || isPointsExplorer || isDateFlex) {\n hotelRateInfo = getMPAHotelRate({\n numOfChildren,\n usePoints: shouldUsePoints,\n isDateFlex,\n hasSpecialRate,\n hotelData: hotel as HotelCardData,\n priceInfo: currentHotelPriceInfo,\n t,\n locale: router.locale ?? 'en',\n pageType,\n ctyhocn: hotel?.ctyhocn,\n queryParameters,\n selectedCurrency,\n hasConnectingRooms,\n isPointsExplorer,\n currenciesError,\n currenciesMap,\n isIndividualRoomsOnly,\n });\n } else if (isDreams) {\n hotelRateInfo = getHotelLeadRateInfo({\n hotelData: hotel as HotelCardData,\n locale: router.locale ?? 'en',\n ctyhocn: hotel?.ctyhocn,\n usePoints: shouldUsePoints,\n selectedCurrency,\n hasConnectingRooms,\n currenciesError,\n currenciesMap,\n pageType,\n t,\n queryParameters,\n });\n }\n\n const badges: HotelBadgeTypes[] = [];\n if (hotelRateInfo.isNewHotel) badges.push('new');\n if (hotelRateInfo.isSaleHotel) badges.push('sale');\n if (isRenoHotel) badges.push('recentlyRenovated');\n\n const { distanceFmt: distance } = getDistanceFromCenterFmt(\n t,\n centerCoordinate,\n hotel?.localization?.coordinate,\n router.locale\n );\n const {\n ctyhocn,\n images,\n name,\n tripAdvisorLocationSummary,\n parking,\n amenities: hotelAmenities,\n roomTypes,\n } = hotelData?.hotel ?? {};\n const parkingType = getParkingType(parking, t);\n const rooms = getRoomTypes(roomTypes, t).slice(0, 3);\n const masterImage = getCompareImage(images?.carousel?.[0]);\n const { ctaHref, ctaLabel, messages } = hotelRateInfo ?? {};\n const amenities = hotelAmenities\n ?.filter((amenity) => !amenity.name.includes('parking'))\n ?.slice(0, 4);\n\n return {\n ctyhocn,\n name,\n tripAdvisorLocationSummary,\n amenities,\n rooms,\n badges,\n distance,\n parkingType,\n masterImage,\n ctaHref,\n ctaLabel,\n messages,\n };\n });\n return {\n isFetching: results.some((result) => result.isFetching),\n isMPALoading,\n hotelInfo: hotelInfo?.slice(0, displayHotelCount),\n };\n};\n","export const CompareSkeleton = ({ numHotels }: { numHotels: number }) => (\n <div className=\"flex w-full\">\n {Array.from({ length: numHotels })\n .fill('_')\n .map((_, i) => (\n <div\n className=\"border-border grid size-full min-w-40 max-w-[336px] items-start border\"\n // eslint-disable-next-line react/no-array-index-key\n key={`compare-skeleton-${i}`}\n >\n {/* image */}\n <div className=\"bg-bg-alt border-border h-48 w-full animate-pulse border-b\" />\n {/* title */}\n <div className=\"border-border w-full self-start border-b p-2\">\n <div className=\"bg-bg-alt h-6 animate-pulse\" />\n </div>\n {/* trip advisor */}\n <div className=\"border-border flex w-full flex-col justify-start gap-1 border-b p-2\">\n <div className=\" bg-bg-alt h-3 w-32 animate-pulse\" />\n <div className=\" bg-bg-alt h-6 w-28 animate-pulse\" />\n <div className=\" bg-bg-alt h-3 w-32 animate-pulse\" />\n </div>\n {/* pricing */}\n <div className=\"border-border flex w-full flex-col justify-start gap-1 border-b p-2\">\n <div className=\" bg-bg-alt h-12 w-24 animate-pulse\" />\n <div className=\" bg-bg-alt h-4 w-32 animate-pulse\" />\n </div>\n {/* parking */}\n <div className=\"border-border flex w-full flex-col gap-1 self-start border-b p-2\">\n <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n </div>\n {/* amenities */}\n <div className=\"border-border flex w-full flex-col gap-1 self-start border-b p-2\">\n <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n </div>\n {/* rooms */}\n <div className=\"border-border flex w-full flex-col gap-1 self-start border-b p-2\">\n <div className=\" bg-bg-alt h-4 w-32 animate-pulse\" />\n <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n </div>\n {/* CTA */}\n <div className=\"flex w-full flex-col items-center gap-1 p-2\">\n <div className=\" bg-bg-alt h-10 w-full animate-pulse\" />\n {numHotels > 2 ? <div className=\" bg-bg-alt h-6 w-1/2 animate-pulse\" /> : null}\n </div>\n </div>\n ))}\n </div>\n);\n","/* eslint-disable validate-jsx-nesting/no-invalid-jsx-nesting */\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { useTranslation } from 'next-i18next';\nimport { useMediaQuery } from 'usehooks-ts';\nimport { useWrappedRouter } from '../../hooks';\nimport { getModalSize, MOBILE_COMPARE_LIMIT, TABLET_COMPARE_LIMIT } from './compare-hotel-utils';\n\nimport { useGetCompareHotelsInfo } from './hooks/use-get-compare-hotels';\nimport Image from 'next/image';\nimport { CompareSkeleton } from './compare-skeleton';\nimport { TripAdvisorRating } from '../trip-advisor/trip-advisor-rating';\nimport Icon from '@dx-ui/osc-icon';\nimport { RateInfoMessages } from '../rate-name-cta/rate-name-cta';\nimport { Link } from '@dx-ui/osc-link';\nimport { HotelBadges } from '../hotel-card/hotel-badges';\nimport type { GoogleCoordinate } from '../../utils';\nimport { useAppDispatch } from '../../providers/app-provider';\n\ntype CompareModalProps = {\n centerCoordinate: GoogleCoordinate | null;\n hotelsToCompare: string[];\n isOpen: boolean;\n onDismiss: () => void;\n onStopCompare?: () => void;\n};\nexport const CompareModal = ({\n hotelsToCompare,\n isOpen,\n onDismiss,\n onStopCompare,\n centerCoordinate,\n}: CompareModalProps) => {\n const { t } = useTranslation('compare-hotels');\n const {\n router: { asPath },\n } = useWrappedRouter();\n const isDesktop = useMediaQuery('(min-width:1024px)');\n const isMobile = useMediaQuery('(max-width:640px)');\n const isTablet = useMediaQuery(`(max-width:1023px)`);\n\n const dispatch = useAppDispatch();\n\n const showRemoveCTA = hotelsToCompare.length > 2;\n\n const modalSize = getModalSize({\n isMobile,\n isDesktop: isTablet || isDesktop,\n compareCtyhocnsCount: hotelsToCompare?.length || 0,\n });\n\n const onRemoveHotel = (ctyhocnToRemove?: string) => {\n if (ctyhocnToRemove) {\n const newCtyhocnList = hotelsToCompare?.filter((hotel) => hotel !== ctyhocnToRemove);\n dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: newCtyhocnList });\n }\n };\n let displayHotelCount = hotelsToCompare?.length;\n\n if (isMobile) displayHotelCount = MOBILE_COMPARE_LIMIT;\n else if (isTablet)\n displayHotelCount =\n hotelsToCompare.length > TABLET_COMPARE_LIMIT ? TABLET_COMPARE_LIMIT : hotelsToCompare.length;\n\n const { hotelInfo, isMPALoading, isFetching } = useGetCompareHotelsInfo({\n ctyhocns: hotelsToCompare,\n centerCoordinate,\n displayHotelCount,\n isEnabled: isOpen,\n });\n\n const handleOnDismiss = (\n event: React.MouseEvent | React.KeyboardEvent,\n isStopCompare?: boolean\n ) => {\n if (!!isStopCompare) {\n event.preventDefault();\n event.stopPropagation();\n }\n onDismiss();\n };\n\n const handleStopComparing = (event: React.MouseEvent | React.KeyboardEvent) => {\n if (hotelsToCompare.length) dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: [] });\n if (onStopCompare) setTimeout(() => onStopCompare(), 50);\n handleOnDismiss(event, true);\n };\n\n const stopComparingButton = () => (\n <div className=\"bg-bg sticky -bottom-4 flex h-full items-center justify-center py-2\">\n <button\n className=\"btn-primary-link mt-2.5 text-sm\"\n type=\"button\"\n onClick={handleStopComparing}\n >\n {t('stopComparing')}\n </button>\n </div>\n );\n\n return (\n <Dialog\n bottomContent={stopComparingButton()}\n isOpen={isOpen}\n size={modalSize}\n title={t('compare')}\n onDismiss={handleOnDismiss as () => void}\n dialogClassName=\"max-h-[90vh]\"\n stickyHeader\n >\n {isFetching || isMPALoading ? (\n <CompareSkeleton numHotels={hotelsToCompare.length} />\n ) : (\n <div className=\"flex flex-col overflow-auto\">\n <table className=\"border-border-alt border\">\n <tr>\n {hotelInfo.map((data) => {\n return (\n <td\n className=\"border-border-alt h-full border-2 p-0\"\n key={`${data?.ctyhocn}-image`}\n >\n <Image\n alt={data?.masterImage?.altText ?? ''}\n width={600}\n height={400}\n src={data?.masterImage?.url ?? ''}\n unoptimized={true}\n data-testid=\"carousel-image\"\n />\n </td>\n );\n })}\n </tr>\n <tr>\n {hotelInfo.map((data) => {\n return (\n <th\n className=\"border-border border-2 p-2 text-left align-top text-sm font-bold\"\n key={data?.name}\n scope=\"col\"\n >\n {data?.name}\n\n {data?.badges ? <HotelBadges badges={data?.badges} /> : null}\n <span\n className=\"text-text-alt block whitespace-nowrap text-xs font-normal\"\n data-testid=\"distanceMarker\"\n >\n {data?.distance}\n </span>\n </th>\n );\n })}\n </tr>\n <tr>\n {hotelInfo.map((data) => {\n const tripAdvisorLocationSummary = data?.tripAdvisorLocationSummary;\n return (\n <td\n className=\"border-border border-2 p-2\"\n key={tripAdvisorLocationSummary?.numReviews}\n >\n <TripAdvisorRating\n tripAdvisorLocationSummary={tripAdvisorLocationSummary}\n showReviewCount\n isCompare\n />\n </td>\n );\n })}\n </tr>\n <tr>\n {hotelInfo.map((data) => {\n return (\n <td className=\"border-border border-2 p-2\" key={`${data?.ctyhocn}-rate`}>\n <RateInfoMessages rateMessages={data?.messages} isCompare />\n </td>\n );\n })}\n </tr>\n <tr>\n {hotelInfo.map((data) => {\n return (\n <td\n className=\"border-border items-center gap-0.5 border-2 p-2 text-sm\"\n key={`${data?.ctyhocn}-parking`}\n >\n <div className=\"flex items-start sm:items-center\">\n <Icon name=\"parking\" />\n <span>{data?.parkingType}</span>\n </div>\n </td>\n );\n })}\n </tr>\n <tr>\n {hotelInfo.map((data) => {\n return (\n <td\n className=\"border-border items-center gap-0.5 border-2 p-2 text-sm\"\n key={`${data?.ctyhocn}-amenities`}\n >\n <ul className=\"grid grid-cols-1 text-sm\">\n {data?.amenities?.map((amenity) => (\n <li key={amenity.id} className=\"flex items-center gap-0.5\">\n <Icon name=\"check\" />\n <span> {amenity.name}</span>\n </li>\n ))}\n </ul>\n </td>\n );\n })}\n </tr>\n <tr>\n {hotelInfo.map((data) => (\n <td\n className=\"border-border items-center gap-0.5 border-2 p-2 text-sm\"\n key={`${data?.ctyhocn}-rooms`}\n >\n <ul className=\"grid grid-cols-1 gap-1.5 text-sm font-bold\">\n <p>\n {t(\n asPath.includes('/locations/') ? 'roomTypesOffered' : 'roomTypesAvailable'\n )}\n </p>\n {data?.rooms?.map((room) => (\n <li\n key={room?.type}\n className=\"flex items-start gap-0.5 font-normal sm:items-center\"\n >\n <Icon name={room.icon} />\n <span> {room.type}</span>\n </li>\n ))}\n </ul>\n </td>\n ))}\n </tr>\n <tr>\n {hotelInfo.map((data) => {\n const ctaHref = data?.ctaHref;\n const ctaLabel = data?.ctaLabel;\n return (\n <td\n className=\"border-border items-center gap-0.5 border-2 p-2 text-sm\"\n key={ctaHref}\n >\n <div className=\"flex size-full flex-col justify-end gap-3 p-2 font-bold\">\n {ctaHref && ctaLabel ? (\n <Link\n url={ctaHref}\n className=\"btn-primary btn flex w-full justify-center no-underline\"\n target=\"_blank\"\n showNewWindowIcon={false}\n >\n {ctaLabel.text}\n </Link>\n ) : null}\n {showRemoveCTA ? (\n <button\n className=\"btn-primary-link hidden text-sm lg:block\"\n type=\"button\"\n onClick={() => onRemoveHotel(data?.ctyhocn)}\n >\n {t('remove')}\n </button>\n ) : null}\n </div>\n </td>\n );\n })}\n </tr>\n </table>\n </div>\n )}\n </Dialog>\n );\n};\n","import { useTranslation } from 'next-i18next';\nimport { InfoMessageBanner } from '../info-message-banner/info-message-banner';\nimport { useMediaQuery } from 'usehooks-ts';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { GOALS } from '../../constants';\nimport { useState } from 'react';\nimport { DESKTOP_COMPARE_LIMIT, MOBILE_COMPARE_LIMIT } from './compare-hotel-utils';\nimport { CompareModal } from './compare-modal';\nimport type { GoogleCoordinate } from '../../utils';\n\ntype CompareBarProps = {\n hotelsToCompare?: string[];\n centerCoordinate: GoogleCoordinate | null;\n onCompare?: () => void;\n onStopCompare?: () => void;\n};\n\nexport const CompareBar = ({ onStopCompare, onCompare, centerCoordinate }: CompareBarProps) => {\n const { t } = useTranslation('compare-hotels');\n const isMobile = useMediaQuery('(max-width:640px)');\n const [showCompareModal, setShowCompareModal] = useState<boolean>(false);\n const { hotelsToCompare, compareHotelsToggle: showCompareBar } = useAppState();\n const dispatch = useAppDispatch();\n\n const selectHotelsBannerMessage = () => {\n if (hotelsToCompare.length < 2) {\n if (hotelsToCompare.length === 1) return t('selectOneMoreHotel');\n return t('selectHotelsToStart');\n }\n return null;\n };\n\n const handleCompareHotels = () => {\n if (onCompare) onCompare();\n sendReward(GOALS.compareHotelsCTAClick);\n setShowCompareModal(true);\n };\n\n const closeCompareModal = () => setShowCompareModal(false);\n\n const handleStopComparing = () => {\n if (hotelsToCompare.length) dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: [] });\n closeCompareModal();\n onStopCompare?.();\n };\n\n return showCompareBar && hotelsToCompare.length ? (\n <>\n <div\n className=\"bg-bg-alt border-border sticky bottom-0 z-10 flex w-full flex-col items-center justify-between gap-3 border-t-2 p-4 md:flex-row\"\n data-testId=\"compare-hotels-bar\"\n >\n {hotelsToCompare.length < 2 ? (\n <InfoMessageBanner bannerClassName=\"bg-bg-alt gap-3 flex items-center pb-0 font-base\">\n <span aria-live=\"assertive\"> {selectHotelsBannerMessage()} </span>\n </InfoMessageBanner>\n ) : (\n <div aria-live=\"assertive\">\n {t('numOfHotelsCompared', {\n compareHotelsSelected: hotelsToCompare.length,\n compareLimit: isMobile ? `${MOBILE_COMPARE_LIMIT}` : `${DESKTOP_COMPARE_LIMIT}`,\n })}\n </div>\n )}\n <div className=\"flex w-full flex-col-reverse gap-4 text-sm md:w-auto md:flex-row\">\n {hotelsToCompare.length ? (\n <button type=\"button\" onClick={handleStopComparing} className=\"btn-primary-link\">\n {t('stopComparing')}\n </button>\n ) : null}\n <button\n type=\"button\"\n className=\"btn-primary disabled:bg-text-disabled w-full rounded p-3 font-bold md:w-72 lg:w-[343px]\"\n disabled={hotelsToCompare.length < 2}\n onClick={handleCompareHotels}\n >\n {t('compareHotels')}\n </button>\n </div>\n </div>\n <CompareModal\n centerCoordinate={centerCoordinate}\n hotelsToCompare={[...hotelsToCompare]}\n isOpen={showCompareModal}\n onDismiss={closeCompareModal}\n onStopCompare={onStopCompare}\n />\n </>\n ) : null;\n};\n","import type { TFunction } from 'i18next';\nimport type {\n HotelImageRatioName,\n HotelImageVariantSize,\n HotelQuery,\n Maybe,\n} from '@dx-ui/queries-dx-shop-search-ui';\nimport { getAspectRatioUrl } from '@dx-ui/utilities-images';\nimport { getNoPhotoAvailable } from '../../utils';\nimport type { IconNames } from '@dx-ui/osc-icon';\n\nexport const MOBILE_COMPARE_LIMIT = 2;\nexport const TABLET_COMPARE_LIMIT = 3;\nexport const DESKTOP_COMPARE_LIMIT = 5;\n\nexport const getParkingType = (\n parking: NonNullable<HotelQuery['hotel']>['parking'] | null | undefined,\n t: TFunction<['hotel-card', 'rate-name-cta', 'locations-page', 'compare-hotels'], undefined>\n) => {\n switch (true) {\n case parking?.hasFreeParking:\n return t('compare-hotels:freeParking');\n case parking?.hasValetParking:\n return t('compare-hotels:valetParking', {\n price: parking?.valetParkingCharge?.chargeAmountFmt,\n });\n case parking?.hasSelfParking && !!parking?.selfParkingCharge?.chargeAmountFmt:\n return t('compare-hotels:selfParking', {\n price: parking?.selfParkingCharge?.chargeAmountFmt,\n });\n default:\n return t('compare-hotels:noParking');\n }\n};\n\nexport const getRoomTypes = (\n rooms: NonNullable<HotelQuery['hotel']>['roomTypes'] | null | undefined,\n t: TFunction<['hotel-card', 'rate-name-cta', 'locations-page', 'compare-hotels'], undefined>\n) => {\n const types = new Set<string>();\n rooms?.forEach((room) => {\n if (room.suite) types.add(t('compare-hotels:suites'));\n else if (room.features.some((feature) => feature.name === 'Connecting rooms'))\n types.add(t('compare-hotels:connectedRooms'));\n else if (room?.numBeds)\n types.add(\n t('compare-hotels:bedWithCount', {\n count: room.numBeds,\n })\n );\n });\n const roomTypes: { type: string; icon: (typeof IconNames)[number] }[] = [];\n types?.forEach((type) => {\n if (type === t('compare-hotels:suites')) roomTypes.push({ type, icon: 'suites' });\n else if (type === t('compare-hotels:connectedRooms'))\n roomTypes.push({ type: t('compare-hotels:connectedRooms'), icon: 'connecting-rooms' });\n else\n roomTypes.push({\n type,\n icon: 'bed',\n });\n });\n return roomTypes.sort((a, b) => a.type.localeCompare(b.type));\n};\nexport const getModalSize = ({\n isMobile,\n isDesktop,\n compareCtyhocnsCount,\n}: {\n isMobile: boolean;\n isDesktop: boolean;\n compareCtyhocns?: string[];\n compareCtyhocnsCount: number;\n}) => {\n switch (true) {\n case isMobile:\n return 'lg';\n case isDesktop && compareCtyhocnsCount < 3:\n return '2xl';\n case isDesktop && compareCtyhocnsCount >= 4:\n return 'container';\n case isDesktop && compareCtyhocnsCount < 4:\n return '5xl';\n default:\n return 'xl';\n }\n};\n\ntype CompareImage = {\n altText?: Maybe<string>;\n ratios: Array<{ url?: Maybe<string>; size: HotelImageRatioName }>;\n variants: Array<{ size: HotelImageVariantSize; url?: Maybe<string> }>;\n};\nexport const getCompareImage = (image?: CompareImage | null) => {\n if (!!image?.ratios?.[0]) {\n const { imgUrl } = getAspectRatioUrl({\n src: image?.ratios?.[0]?.url,\n width: 326,\n });\n return { url: imgUrl, altText: image?.altText };\n }\n const noPhoto = getNoPhotoAvailable('xs')?.[0]?.variants[0];\n return { url: noPhoto?.url };\n};\n","import { useTranslation } from 'next-i18next';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { COMPARE_ONBOARDING, GOALS } from '../../constants';\nimport { useGetMVTSelections, useWrappedRouter } from '../../hooks';\nimport { FeatureToolTip } from './feature-tool-tip';\nimport { useLocalStorage } from 'usehooks-ts';\nimport { useRef, useState } from 'react';\n\ntype CompareToggleProps = {\n onChange?: () => void;\n};\n\nexport const CompareHotelsToggle = ({ onChange }: CompareToggleProps) => {\n const { t } = useTranslation('compare-hotels');\n const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n\n const { compareHotelsToggle, hotelsToCompare } = useAppState();\n const dispatch = useAppDispatch();\n\n //NHCSEARCH-5449 | Compare Hotels Onboarding MVT\n const toggleRef = useRef<HTMLInputElement>(null);\n const {\n isLoaded: isOnboardingMVTLoaded,\n isMVTVariant: { b: isOnboardingVarB, c: isOnboardingVarC },\n } = useGetMVTSelections({\n agentId: COMPARE_ONBOARDING.agentId,\n MVTVariants: ['b', 'c'],\n isProvisional: router.locale === 'en',\n });\n const [isOnboarded, setIsOnboarded] = useLocalStorage('compare-hotels-onboarded', false);\n const [isCompareToolTipOpen, setIsCompareToolTipOpen] = useState(true);\n const handleToolTipClose = () => {\n if (isOnboardingVarB) setIsOnboarded(true);\n setIsCompareToolTipOpen(false);\n if (toggleRef.current) toggleRef.current.focus();\n };\n const showCompareOnboardingToolTip = isOnboardingMVTLoaded && !isOnboarded;\n\n const handleInputChange = () => {\n if (onChange) onChange();\n if (!compareHotelsToggle) sendReward(GOALS.compareHotelsToggleOn);\n //when hotels to compare still selected and toggle is set to false - remove previous selections\n if (!compareHotelsToggle && hotelsToCompare.length)\n dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: [] });\n dispatch({ type: 'SET_COMPARE_HOTELS_TOGGLE', payload: !compareHotelsToggle });\n if (isOnboardingVarB) setIsOnboarded(true);\n setIsCompareToolTipOpen(false);\n };\n return !queryParameters?.datesFlex ? (\n <div className=\"relative ml-1 mr-2 text-nowrap pt-5 rtl:mb-2\">\n {/* NHCSEARCH-5449 | Compare Hotels Onboarding MVT */}\n <FeatureToolTip\n absolutePosition=\"-left-2 -top-10\"\n tailPosition=\"left-6\"\n message={t('newFeature')}\n onDismiss={handleToolTipClose}\n containerClass=\"w-[115px] py-3 pl-3 pr-4\"\n shouldShowFeatureToolTip={\n !!(showCompareOnboardingToolTip && isOnboardingVarB && isCompareToolTipOpen)\n }\n />\n <FeatureToolTip\n absolutePosition=\"[@media(max-width:422px)]:-right-24 [@media(min-width:423px)]:-right-48 [@media(min-width:588px)]:-right-2 [@media(min-width:768px)]:-right-44 [@media(min-width:876px)]:-right-2 [@media(min-width:1200px)]:left-0 -top-36\"\n tailPosition=\"[@media(max-width:422px)]:left-1/3 [@media(min-width:423px & max-width:587px)]:left-28 [@media(min-width:588px)]:left-48 [@media(min-width:768px)]:left-6 [@media(min-width:876px)]:left-48 [@media(min-width:1124px)]:left-2 [@media(min-width:1201px)]:-translate-x-44\"\n title={t('compareAndBook')}\n message={t('compareKeyFeatures')}\n onDismiss={handleToolTipClose}\n cta={{ label: t('ok'), onClick: handleToolTipClose }}\n containerClass=\"w-[343px] p-3\"\n shouldShowFeatureToolTip={\n !!(showCompareOnboardingToolTip && isOnboardingVarC && isCompareToolTipOpen)\n }\n />\n <div className=\"flex\">\n <label className=\"flex cursor-pointer items-center font-bold\">\n <div className=\"relative mr-1 inline-flex\">\n <input\n className=\"peer sr-only\"\n type=\"checkbox\"\n onChange={handleInputChange}\n ref={toggleRef}\n checked={compareHotelsToggle}\n />\n <div className=\"peer-checked:bg-hilton peer-focus:ring-hilton peer-checked:after:border-bg after:border-bg-disabled after:bg-bg peer h-6 w-12 rounded-full bg-[#CFCFCF] ring-offset-1 after:absolute after:top-[2px] after:size-5 after:rounded-full after:border after:transition-all after:content-[''] peer-focus:outline-none peer-focus:ring-2 motion-reduce:transition-none ltr:after:left-[4px] peer-checked:ltr:after:translate-x-full rtl:after:right-[4px] peer-checked:rtl:after:-translate-x-full\" />\n </div>\n <span className=\"text-sm first-letter:capitalize rtl:pr-2\">{t('compareHotels')}</span>\n </label>\n </div>\n </div>\n ) : null;\n};\n","import { ControlClose } from '@dx-ui/osc-controls';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport { useEffect, useRef } from 'react';\n\nexport const FeatureToolTip = ({\n absolutePosition,\n cta,\n containerClass,\n message,\n onDismiss,\n shouldShowFeatureToolTip,\n tailPosition,\n title,\n}: {\n absolutePosition: string;\n cta?: { label: string; onClick: () => void };\n containerClass?: string;\n message?: string;\n onDismiss: () => void;\n shouldShowFeatureToolTip: boolean;\n tailPosition?: string;\n title?: string;\n}) => {\n const { t } = useTranslation('osc-dialog');\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (ref.current) ref.current.focus();\n }, []);\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onDismiss?.();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [onDismiss]);\n\n return shouldShowFeatureToolTip ? (\n <div className={cx('absolute z-50', absolutePosition)} ref={ref} tabIndex={-1} role=\"tooltip\">\n <div\n className={cx(\n 'bg-tier-diamond text-bg relative flex flex-col gap-2 rounded text-base shadow-[0px_4px_4px_0px_rgba(0,0,0,0.40)]',\n containerClass\n )}\n >\n {title ? <div className=\"font-bold\">{title}</div> : null}\n <div>{message}</div>\n {cta?.label ? (\n <button\n type=\"button\"\n onClick={cta.onClick}\n className=\"border-bg self-start rounded-lg border px-4 py-2 text-sm\"\n >\n {cta.label}\n </button>\n ) : null}\n <div\n className={cx(\n 'border-t-tier-diamond absolute bottom-[-8px] size-0 border-x-8 border-t-8 border-transparent',\n tailPosition\n )}\n />\n </div>\n {!cta?.label ? (\n <ControlClose\n size=\"xs\"\n onClick={onDismiss}\n className=\"text-bg absolute end-0.5 top-0.5\"\n label={t('close')}\n />\n ) : null}\n </div>\n ) : null;\n};\n","/* eslint-disable jsx-a11y/no-onchange */\nimport type * as React from 'react';\nimport { useMetrics, useWrappedRouter } from '../../hooks';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport {\n CurrencyConverter as OSCCurrencyConverter,\n convert,\n useCurrencyConversion,\n} from '@dx-ui/osc-currency-converter';\nimport { useFilterState } from '../../providers/filter-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { GOALS } from '../../constants';\n\ntype CurrencyConverterProps = {\n onChange?: () => void;\n};\n\nexport const CurrencyConverter = ({ onChange }: CurrencyConverterProps) => {\n const metrics = useMetrics();\n const { router } = useWrappedRouter();\n const dispatch = useAppDispatch();\n const { selectedCurrency: currencyCode, pageType, selectedCurrency } = useAppState();\n const activeFiltersState = useFilterState();\n\n const { currenciesMap } = useCurrencyConversion();\n async function handleChange(event: React.ChangeEvent<HTMLSelectElement>) {\n const currency = event.target.value;\n\n const fromCurrency = currenciesMap?.get(selectedCurrency || 'USD');\n const toCurrency = currenciesMap?.get(currency || 'USD');\n if (!fromCurrency || !toCurrency) {\n return;\n }\n sendReward(GOALS.currencyEngagement);\n const converted = convert(\n activeFiltersState?.priceFilter?.[1],\n fromCurrency,\n toCurrency,\n 0,\n ''\n );\n dispatch({\n type: 'SET_DISPLAY_CURRENCY',\n payload: {\n currency,\n ...(activeFiltersState?.priceFilter &&\n converted.price && {\n priceFilter: [activeFiltersState?.priceFilter?.[0], converted.price],\n }),\n },\n });\n onChange?.();\n await metrics.trackCurrencyConverterClick({ currencyCode: currency || 'LOCAL' });\n }\n\n const selectProps = {\n id: 'selectCurrencyConverter',\n 'data-testid': 'currencyConverterSelect',\n };\n\n if (pageType.isPointsExplorer) return null;\n\n return (\n <div className=\"w-36 items-center pl-2 text-sm md:w-64 rtl:pl-0 rtl:pr-2\">\n <OSCCurrencyConverter\n showDefaultOption={true}\n language={router.locale as string}\n onChange={handleChange}\n selectedCurrency={currencyCode as string}\n hasStackedDisplay={true}\n selectProps={selectProps}\n />\n </div>\n );\n};\n","import {\n NUM_AMENITIES_SUGGESTIONS_WANTED,\n HotelAttributeIds,\n MAX_SUGGESTED_AMENITY_FILTERS_WITH_SALE_FILTER,\n} from '../components/filters/filter.constants';\nimport type { AmenityItem } from '../components/filters/suggested-filters';\nimport type { HotelAmenityId } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useAppState } from '../providers/app-provider';\nimport type { HotelType } from '../providers/app-provider/app-provider.types';\nimport { useMemo } from 'react';\nimport { useFeatureToggleConfig } from './use-feature-toggle';\nimport type { Maybe } from '@dx-ui/gql-types';\nimport { useTranslation } from 'next-i18next';\nimport { HIGHEST_AMENITIES_SUGGESTED_FILTERS } from '../constants';\nimport { useGetMVTSelections } from './use-get-mvt-selections';\n\nconst findAmenity = (wantedAmenityId: string, amenities: AmenityItem[]) => {\n const foundAmenity = amenities.find((amenity) => amenity.id === wantedAmenityId);\n return (\n foundAmenity || {\n id: wantedAmenityId,\n name: wantedAmenityId,\n }\n );\n};\n\nconst calculateSuggestedFilterCounts = ({\n filtersList,\n visibleHotels,\n hotelsInBounds,\n}: {\n filtersList?: string[];\n visibleHotels: string[];\n hotelsInBounds: Record<string, HotelType>;\n}) => {\n return filtersList?.length\n ? filtersList.reduce<{\n isAtleastOneSuggestedFilter: boolean;\n suggestedFilterCounts: { [key: string]: number };\n }>(\n (result, suggestedFilter) => {\n const count = visibleHotels.reduce((count, hotel) => {\n const inBoundsHotel = hotelsInBounds[hotel];\n if (inBoundsHotel) {\n return inBoundsHotel.amenityIds.includes(suggestedFilter as HotelAmenityId)\n ? count + 1\n : count;\n }\n return count;\n }, 0);\n\n return {\n isAtleastOneSuggestedFilter: result.isAtleastOneSuggestedFilter || count > 0,\n suggestedFilterCounts: {\n ...result.suggestedFilterCounts,\n [suggestedFilter]: count,\n },\n };\n },\n {\n isAtleastOneSuggestedFilter: false,\n suggestedFilterCounts: {},\n }\n )\n : {\n isAtleastOneSuggestedFilter: false,\n suggestedFilterCounts: {},\n };\n};\n\nconst calculateTopSuggestedFilters = (\n suggestedFilterCounts: { [key: string]: number },\n amenities: AmenityItem[],\n maxSuggestedFilters: number\n) => {\n const topSuggestedFilters: { [key: string]: AmenityItem } = {};\n\n for (const suggestedFilter of Object.keys(suggestedFilterCounts)) {\n const count = suggestedFilterCounts[suggestedFilter] ?? 0;\n\n if (count > 0 && Object.keys(topSuggestedFilters)?.length < maxSuggestedFilters) {\n topSuggestedFilters[suggestedFilter] = findAmenity(suggestedFilter, amenities);\n const topFilter = topSuggestedFilters[suggestedFilter];\n if (topFilter) topFilter.count = suggestedFilterCounts[suggestedFilter];\n } else if (count > 0) {\n const smallestCountKey = Object.keys(topSuggestedFilters).reduce((a, b) => {\n const filterA = topSuggestedFilters[a];\n const filterB = topSuggestedFilters[b];\n if (filterA && filterB) {\n const aCount = filterA.count || 0;\n const bCount = filterB.count || 0;\n return aCount < bCount ? a : b;\n }\n return a;\n });\n\n const smallestCount = topSuggestedFilters[smallestCountKey]?.count;\n\n if (!smallestCount || count > smallestCount) {\n delete topSuggestedFilters[smallestCountKey];\n topSuggestedFilters[suggestedFilter] = findAmenity(suggestedFilter, amenities);\n const topSuggestedFilter = topSuggestedFilters[suggestedFilter];\n if (topSuggestedFilter) topSuggestedFilter.count = suggestedFilterCounts[suggestedFilter];\n }\n }\n }\n return topSuggestedFilters;\n};\n\nconst getSuggestedFiltersQuant = ({ hasSalesFilter }: { hasSalesFilter: boolean }) => {\n if (hasSalesFilter) {\n return MAX_SUGGESTED_AMENITY_FILTERS_WITH_SALE_FILTER;\n } else {\n return NUM_AMENITIES_SUGGESTIONS_WANTED;\n }\n};\n//NHCSEARCH-5346\nconst HIGHEST_CONVERTING_AMENITIES = ['evCharging', 'freeParking', 'airportShuttle', 'petsAllowed'];\nconst CONGFIGURED_SUGGESTED_FILTERS = [\n 'dx-location::locality::us::ny::new-york-city',\n 'dx-location::locality::us::ca::los-angeles',\n 'dx-location::locality::us::fl::orlando',\n 'dx-location::locality::us::il::chicago',\n 'dx-location::locality::us::dc::washington-dc',\n 'dx-location::locality::us::nv::las-vegas',\n 'dx-location::locality::gb::london',\n 'dx-location::locality::us::ga::atlanta',\n 'dx-location::locality::us::ca::orange',\n 'dx-location::locality::us::ca::san-diego',\n 'dx-location::locality::us::tx::dallas',\n 'dx-location::locality::us::ma::boston',\n 'dx-location::locality::us::hi::honolulu',\n 'dx-location::locality::us::fl::ft-lauderdale',\n 'dx-location::locality::us::fl::miami',\n 'dx-location::locality::us::tn::nashville',\n 'dx-location::locality::mx::cancun',\n 'dx-location::locality::us::fl::tampa',\n 'dx-location::locality::us::tx::houston',\n 'dx-location::locality::us::az::phoenix',\n];\n\nexport const useSuggestedFilters = ({\n visibleHotels,\n amenities,\n matchId,\n saleFilter,\n}: {\n visibleHotels: string[];\n amenities: AmenityItem[];\n matchId?: Maybe<string>;\n saleFilter?: { showSaleFilter: boolean; saleFilterCount: number };\n}) => {\n const { hotelsInBounds } = useAppState();\n const { t } = useTranslation('filters');\n\n const { isLoaded: isConducticsLoaded, isMVTVariant: isHighestConvertingAmenitiesVariant } =\n useGetMVTSelections({ agentId: HIGHEST_AMENITIES_SUGGESTED_FILTERS.agentId });\n\n const isHighestConvertingAmenitiesTest =\n isConducticsLoaded && isHighestConvertingAmenitiesVariant.b;\n\n const { config: defaultConfig, configFromRule } = useFeatureToggleConfig(\n 'config-rule-search-ui-suggested-filters',\n { matchId: matchId || '' }\n );\n\n const suggestedSaleFilter = useMemo(\n () =>\n saleFilter?.showSaleFilter && visibleHotels.length <= 150\n ? {\n sale: {\n id: HotelAttributeIds.sale,\n name: t('saleRates'),\n count: saleFilter?.saleFilterCount,\n },\n }\n : null,\n [saleFilter?.saleFilterCount, saleFilter?.showSaleFilter, t, visibleHotels.length]\n );\n\n const filtersList =\n isHighestConvertingAmenitiesTest && matchId && !CONGFIGURED_SUGGESTED_FILTERS.includes(matchId)\n ? HIGHEST_CONVERTING_AMENITIES\n : (configFromRule || defaultConfig)?.suggestedFilters;\n\n const maxSuggestedFilters = getSuggestedFiltersQuant({\n hasSalesFilter: Boolean(suggestedSaleFilter),\n });\n\n // get the count of all filters in filtersList\n const { isAtleastOneSuggestedFilter, suggestedFilterCounts } = useMemo(\n () => calculateSuggestedFilterCounts({ filtersList, visibleHotels, hotelsInBounds }),\n [filtersList, hotelsInBounds, visibleHotels]\n );\n // get only the top filters count while maintaining the order of filtersList\n const suggestedFilters = useMemo(\n () => calculateTopSuggestedFilters(suggestedFilterCounts, amenities, maxSuggestedFilters),\n\n [suggestedFilterCounts, amenities, maxSuggestedFilters]\n );\n\n const topSuggestedFilters = suggestedSaleFilter\n ? {\n ...suggestedSaleFilter,\n ...suggestedFilters,\n }\n : suggestedFilters;\n\n return { topSuggestedFilters, isAtleastOneSuggestedFilter };\n};\n","import cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport { useFilterState } from '../../providers/filter-provider';\nimport type { HotelAmenityId, Maybe } from '@dx-ui/queries-dx-shop-search-ui';\nimport type { ActiveFiltersState } from './filter.constants';\nimport { useMetrics } from '../../hooks';\nimport { GOALS } from '../../constants';\nimport { useSuggestedFilters } from '../../hooks/use-suggested-filters';\nimport Icon, { AmenityIcons } from '@dx-ui/osc-icon';\nimport { HotelAttributeIds } from './filter.constants';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { TaxonomyList } from '@dx-ui/osc-taxonomy-list';\nimport { useState } from 'react';\nimport { useVerticalSpaceMVT } from '../../hooks/use-vertical-space-MVT';\n\nexport type AmenityItem = {\n id: string;\n name: string;\n hint?: string | null;\n count?: number;\n};\ntype SuggestedFilterButtonsProps = {\n amenities?: AmenityItem[];\n isConductricsLoaded?: boolean;\n isFindingHotels?: boolean;\n onFilterCriteriaChange: (activeFiltersState: ActiveFiltersState) => void;\n visibleHotels: string[];\n matchId?: Maybe<string>;\n saleFilter?: { showSaleFilter: boolean; saleFilterCount: number };\n};\n\ntype SuggestedFiltersAmenitiesProps = {\n suggestedFilterOrderedList: AmenityItem[];\n onFilterCriteriaChange: (activeFiltersState: ActiveFiltersState) => void;\n showSaleFilter?: boolean;\n suggestedFilterMVTVariant?: Record<string, boolean>;\n};\n\n/*\n * SuggestedFilterButtons\n * Displays the Suggested Filter Component\n */\nexport const SuggestedFilterButtons = ({\n amenities = [],\n isConductricsLoaded,\n isFindingHotels,\n onFilterCriteriaChange,\n visibleHotels,\n matchId,\n saleFilter,\n}: SuggestedFilterButtonsProps) => {\n const { isAtleastOneSuggestedFilter, topSuggestedFilters } = useSuggestedFilters({\n visibleHotels,\n amenities,\n matchId,\n saleFilter,\n });\n const suggestedFiltersOrderedList = Object.values(topSuggestedFilters);\n\n const showSuggestedFilters = isAtleastOneSuggestedFilter || saleFilter?.showSaleFilter;\n\n const { isSuggestedFiltersInHorizontalScroll } = useVerticalSpaceMVT();\n\n if (showSuggestedFilters) {\n if (isFindingHotels || !isConductricsLoaded || !amenities.length)\n return <SuggestedFiltersShimmer shouldShowTitle={!isSuggestedFiltersInHorizontalScroll} />;\n else if (isConductricsLoaded && !!visibleHotels.length)\n return (\n <>\n {isSuggestedFiltersInHorizontalScroll ? null : <SuggestedFiltersTitle />}\n <SuggestedFiltersAmenities\n onFilterCriteriaChange={onFilterCriteriaChange}\n suggestedFilterOrderedList={suggestedFiltersOrderedList}\n showSaleFilter={saleFilter?.showSaleFilter}\n />\n </>\n );\n }\n return null;\n};\n\n/*\n * SuggestedFiltersShimmer\n * Returns the Suggested Filters Shimmer State\n */\nconst SuggestedFiltersShimmer = ({ shouldShowTitle }: { shouldShowTitle?: boolean }) => (\n <>\n {shouldShowTitle ? (\n <div className=\"flex\" data-testid=\"suggested-filters-shimmer\">\n <div className=\"bg-bg-alt mb-4 h-6 w-32 animate-pulse\" />\n </div>\n ) : null}\n <div\n className={cx('flex h-32 gap-2 lg:h-16', {\n '-mb-3 pt-3.5': !shouldShowTitle,\n })}\n >\n <div className=\"bg-bg-alt mr-2 h-10 w-20 animate-pulse rounded-full lg:mr-1 lg:w-36\" />\n <div className=\"bg-bg-alt mr-2 h-10 w-20 animate-pulse rounded-full lg:mr-1 lg:w-36\" />\n <div className=\"bg-bg-alt mr-2 h-10 w-20 animate-pulse rounded-full lg:mr-1 lg:w-36\" />\n <div className=\"bg-bg-alt mr-2 h-10 w-20 animate-pulse rounded-full lg:mr-1 lg:w-36\" />\n </div>\n </>\n);\n\n/*\n * Returns Suggest Filters Title\n */\nconst SuggestedFiltersTitle = () => {\n const { t } = useTranslation('filters');\n return (\n <h2 className=\"label mr-1 flex items-start pb-1 font-semibold tracking-tight rtl:mx-0\">\n {t('suggestedFiltersLabel')}\n </h2>\n );\n};\n\nconst SuggestedFiltersAmenities = ({\n onFilterCriteriaChange,\n suggestedFilterOrderedList,\n}: SuggestedFiltersAmenitiesProps) => {\n const { t } = useTranslation('filters');\n const activeFiltersState = useFilterState();\n\n /* NHCSEARCH-5451 Vertical Space MVT */\n const { isShorterSuggestedFilters, isSuggestedFiltersInHorizontalScroll } = useVerticalSpaceMVT();\n\n const getTaxonomyListClassName = () => {\n switch (true) {\n case isShorterSuggestedFilters:\n return '-mb-3';\n case isSuggestedFiltersInHorizontalScroll:\n return '-mb-3 pt-3.5';\n default:\n return undefined;\n }\n };\n return (\n <div className=\"pb-2\">\n <TaxonomyList\n labelledBy=\"suggestedFilters\"\n testId=\"suggested-filters\"\n name={t('suggestedFiltersLabel')}\n listItemClassname={getTaxonomyListClassName()}\n >\n {suggestedFilterOrderedList?.map((amenity) => {\n const amenityListCount = amenity?.count;\n const amenitySelected =\n activeFiltersState.amenityFilters.includes(amenity?.id ?? '') ||\n activeFiltersState.attributeFilters.includes(amenity?.id);\n return amenityListCount ? (\n <SuggestedFilterButton\n amenity={amenity}\n amenityListCount={amenityListCount}\n isAmenitySelected={amenitySelected}\n onFilterCriteriaChange={onFilterCriteriaChange}\n />\n ) : null;\n })}\n </TaxonomyList>\n <span aria-hidden=\"true\" className=\"sr-only\" id=\"suggestedFilters\">\n {t('suggestedFiltersLabel')}\n </span>\n </div>\n );\n};\nfunction SuggestedFilterButton({\n amenity,\n amenityListCount,\n isAmenitySelected,\n onFilterCriteriaChange,\n}: {\n amenity: AmenityItem;\n amenityListCount: number;\n isAmenitySelected: boolean;\n onFilterCriteriaChange: (activeFiltersState: ActiveFiltersState) => void;\n}) {\n const [a11yText, setA11yText] = useState<string>('');\n const [selectedAmenity, setSelectedAmenity] = useState('');\n const { t } = useTranslation('filters');\n const activeFiltersState = useFilterState();\n const metrics = useMetrics();\n\n /* NHCSEARCH-5451 Vertical Space MVT */\n const { isShorterSuggestedFilters } = useVerticalSpaceMVT();\n\n const resetSuggestedFilter = (amenityId: HotelAmenityId | typeof HotelAttributeIds.sale) => {\n const attributeFilters = [...activeFiltersState.attributeFilters];\n const attributeIndex = attributeFilters.indexOf(amenityId);\n const amenityFilters = [...activeFiltersState.amenityFilters];\n const amenityIndex = amenityFilters.indexOf(amenityId);\n\n if (amenityId === HotelAttributeIds.sale) {\n if (attributeIndex !== -1) attributeFilters.splice(attributeIndex, 1);\n else attributeFilters.push(amenityId);\n } else {\n if (amenityIndex !== -1) amenityFilters.splice(amenityIndex, 1);\n else amenityFilters.push(amenityId);\n }\n\n const updatedActiveFiltersState = {\n ...activeFiltersState,\n amenityFilters,\n attributeFilters,\n };\n\n onFilterCriteriaChange(updatedActiveFiltersState);\n };\n const handleOnClick = async (\n amenityId: HotelAmenityId | typeof HotelAttributeIds.sale,\n amenitySelected: boolean\n ) => {\n setSelectedAmenity(amenityId);\n const suggestedFiltersA11YText = amenitySelected\n ? t('suggestedFiltersRemoved')\n : t('suggestedFiltersApplied');\n setA11yText(suggestedFiltersA11YText);\n\n resetSuggestedFilter(amenityId);\n sendReward(GOALS.suggestedFilterEngagement);\n await metrics.trackSuggestedFilters(amenityId);\n\n setTimeout(() => {\n if (amenitySelected) setA11yText('');\n }, 2000);\n };\n\n return (\n <div className=\"h-10 px-1\" key={amenity.name}>\n <button\n type=\"button\"\n name={`${amenity?.name} (${amenityListCount})`}\n aria-label={`${amenity?.name} ${amenityListCount} ${\n selectedAmenity === amenity.id ? a11yText : ''\n }`}\n className={cx(\n 'btn btn-primary-outline focus:border-primary flex items-center rounded-full',\n {\n 'text-bg bg-primary outline-none active:text-text-inverse focus:text-text-inverse hover:text-text-inverse':\n isAmenitySelected,\n 'h-[26px] gap-x-1': isShorterSuggestedFilters,\n 'gap-x-2': !isShorterSuggestedFilters,\n }\n )}\n onClick={() => handleOnClick(amenity?.id as HotelAmenityId, isAmenitySelected)}\n >\n <span>\n <Icon\n name={AmenityIcons[amenity.id as HotelAmenityId] || amenity.id}\n size={isShorterSuggestedFilters ? 'xs' : 'md'}\n />\n </span>\n <span\n aria-hidden\n className={cx({\n 'text-xs font-normal': isShorterSuggestedFilters,\n 'text-sm font-bold': !isShorterSuggestedFilters,\n })}\n >\n <span>{`${amenity.name} (${amenityListCount})`}</span>\n </span>\n </button>\n {a11yText && selectedAmenity === amenity.id ? (\n <span aria-live=\"assertive\" className=\"sr-only -order-1\">\n <span role=\"status\">{`${amenity?.name} ${a11yText}`} </span>\n </span>\n ) : null}\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { MAX_PROPERTIES_PER_LIST_VIEW_PAGE } from '../../constants';\n\nexport type HotelCounterProps = {\n count: number;\n currentPageIndex: number;\n customMessage?: string;\n customSRMessage?: string;\n isLoading: boolean;\n isListVisible: boolean;\n};\n\nexport const HotelCounter = ({\n count,\n currentPageIndex,\n isLoading,\n customMessage,\n customSRMessage,\n isListVisible,\n}: HotelCounterProps) => {\n const pageStart = currentPageIndex * MAX_PROPERTIES_PER_LIST_VIEW_PAGE + 1;\n const pageEnd =\n pageStart + MAX_PROPERTIES_PER_LIST_VIEW_PAGE - 1 < count\n ? pageStart + MAX_PROPERTIES_PER_LIST_VIEW_PAGE - 1\n : count;\n const { t } = useTranslation('hotel-counter-text');\n\n const message = customMessage\n ? customMessage\n : count > MAX_PROPERTIES_PER_LIST_VIEW_PAGE && isListVisible\n ? t('hotelShowingWithPages', { count, pageStart, pageEnd })\n : t('hotelShowingWithCount', { count });\n\n const srMessage = customSRMessage\n ? customSRMessage\n : count === 0\n ? t('notFoundMessage')\n : message;\n const [srCounter, setSrCounter] = useState(1);\n useEffect(() => {\n let interval: ReturnType<typeof setInterval>;\n if (isLoading) {\n interval = setInterval(() => setSrCounter(srCounter + 1), 3000);\n } else {\n setSrCounter(0);\n }\n return () => clearInterval(interval);\n }, [isLoading, srCounter]);\n\n return isLoading ? (\n <div>\n <h2\n aria-hidden\n className=\"text-sm font-semibold md:text-lg lg:text-xl\"\n data-testid=\"findingHotels\"\n >\n {t('findingHotels')}\n </h2>\n <span aria-live=\"assertive\" className=\"sr-only\">\n <span key={srCounter} role=\"status\">\n {t('findingHotels')}\n </span>\n </span>\n </div>\n ) : (\n <div>\n <h2\n className=\"mr-2 font-semibold md:mr-0 md:text-lg lg:text-xl \"\n data-testid=\"numberOfHotelsShowing\"\n >\n <span aria-hidden=\"true\">{message} </span>\n </h2>\n <span aria-atomic=\"true\" aria-live=\"assertive\" className=\"sr-only -order-1\">\n <span role=\"status\">{srMessage}</span>\n </span>\n </div>\n );\n};\n","export * from './hotel-counter';\n","import { type LoginResponse, useAuth } from '@dx-ui/framework-auth-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { LoginIFrame } from '@dx-ui/osc-login';\nimport { Trans, useTranslation } from 'next-i18next';\nimport { useCallback, useState } from 'react';\nimport { useIsClient } from 'usehooks-ts';\nimport { GOALS, env } from '../../../constants';\nimport { useWrappedRouter } from '../../../hooks';\nimport { generateSigninUrl } from '../../../utils';\nimport { InfoMessageBanner } from '../../info-message-banner/info-message-banner';\n\nexport const LogInBanner = () => {\n const isClient = useIsClient();\n const { t } = useTranslation('list-view');\n const { router } = useWrappedRouter();\n const { login, isAuthenticated } = useAuth();\n const [showLoginModal, setShowLoginModal] = useState<boolean>(false);\n\n const closeLoginModal = () => setShowLoginModal(false);\n const openLoginModal = () => {\n setShowLoginModal(true);\n sendReward(GOALS.shopLoginClick);\n };\n\n const lang = router.locale as string;\n const forgetInfoUrl = env.PARTNER_FORGET_INFO_LINK.replace('/__LANG__/', `/${lang}/`);\n const options = {\n showCreatePassword: false,\n forgetInfoLink: { url: forgetInfoUrl },\n secureInfoLink: { url: env.GLOBAL_PRIVACY_URL },\n signInLink: { url: generateSigninUrl(router.asPath, lang) },\n };\n\n const onSignInAttempt = useCallback(\n async (resp: LoginResponse) => {\n if (resp?.data) {\n await login(resp);\n window.location.reload();\n }\n },\n [login]\n );\n const handleLogin = async (resp: LoginResponse) => {\n await onSignInAttempt?.(resp);\n if (!resp.error) {\n closeLoginModal();\n sendReward(GOALS.shopHonorsLogin);\n }\n };\n\n return isClient && !isAuthenticated ? (\n <>\n <InfoMessageBanner\n bannerClassName=\"bg-tertiary\"\n iconClassName=\"text-bg\"\n iconName=\"star-burst\"\n >\n <div className=\"text-bg pl-2.5 pt-px font-bold\">\n <Trans\n ns=\"list-view\"\n i18nKey=\"loginBanner.getExclusiveRates\"\n components={{\n SignInLink: (\n <button onClick={openLoginModal} type=\"button\" className=\"font-normal underline\">\n signing in\n </button>\n ),\n }}\n />\n </div>\n </InfoMessageBanner>\n <Dialog\n isOpen={showLoginModal}\n onDismiss={closeLoginModal}\n size=\"md\"\n title={t('loginBanner.signIn')}\n >\n <LoginIFrame\n data-testid=\"loginIframe\"\n frameSrc={generateSigninUrl(router?.asPath, lang)}\n options={options}\n onLoginAttempt={handleLogin}\n onClose={closeLoginModal}\n title={t('loginBanner.signIn')}\n />\n </Dialog>\n </>\n ) : null;\n};\n","// The <abbr> tags announces the Abbreviation of states on the screen readers\n// This function will return the non-abbrevated form from the end of the Title\n// e.g. \"Hotels in New York, [NY](New York)\" becomes \"New York\"\nexport const getTitleExpandedAbbreviation = (title: string) => {\n if (title) return title.substring(title.indexOf('(') + 1, title.lastIndexOf(')'));\n};\n","import Markdown from 'markdown-to-jsx';\nimport * as React from 'react';\nimport { getTitleExpandedAbbreviation } from './locations-page.utils';\n\n// We're \"hijacking\" markdown's link syntax in order to create <abbr> tags\n// markdown-to-jsx doesn't handle spaces in the link's href, so we need to intercept the markdown and encode the href value\n// e.g. \"Hotels in New York, [NY](New York)\" becomes \"Hotels in New York, [NY](New%20York)\"\nconst sanitizeTitleMarkdown = (title: string) =>\n title?.replace(\n /\\[([^\\]]+)\\]\\(([^)]+)\\)/,\n (_, abbreviation, expandedName) => `[${abbreviation}](${encodeURI(expandedName)})`\n );\nexport const LocationsPageHeadingLevel1 = ({ title }: { title: string | null | undefined }) => {\n const titleAbbreviationExpanded = title ? getTitleExpandedAbbreviation(title) : undefined;\n\n return title ? (\n <div className=\"mb-4 flex-1 text-left rtl:text-right\">\n <h1 className=\"font-sans text-xl font-bold\">\n <Markdown\n options={{\n createElement(type, props, children) {\n if (type === 'a') {\n const abbreviation = children;\n const expandedName = decodeURI((props as { href: string }).href);\n return React.createElement(\n 'abbr',\n {\n title: expandedName,\n style: { textDecoration: 'none' },\n key: `abbr-${JSON.stringify(children)}`,\n 'aria-hidden': true,\n },\n abbreviation\n );\n }\n return React.createElement(type, props, children);\n },\n }}\n >\n {sanitizeTitleMarkdown(title || '')}\n </Markdown>\n </h1>\n {titleAbbreviationExpanded && <span className=\"sr-only\">{titleAbbreviationExpanded}</span>}\n </div>\n ) : null;\n};\n","import type { AmenityItem } from '../filters/suggested-filters';\nimport { SuggestedFilterButtons } from '../filters/suggested-filters';\nimport { HotelCounter } from '../hotel-counter';\nimport { MapListToggleButton } from '../map-list-toggle-button/map-list-toggle-button';\nimport { useConfigRule } from '@dx-ui/framework-config-rule-provider';\nimport type { ActiveFiltersState } from '../filters/filter.constants';\nimport type { Maybe } from '@dx-ui/gql-types';\nimport { useAppState } from '../../providers/app-provider';\nimport { SMBProfileSwitcher } from '@dx-ui/osc-smb-profile-switcher';\nimport { useSmbToggle, useWrappedRouter } from '../../hooks';\nimport { LogInBanner } from '../list-view/log-in-banner/log-in-banner';\nimport { LocationsPageHeadingLevel1 } from '../locations-page/locations-page-heading';\nimport { useVerticalSpaceMVT } from '../../hooks/use-vertical-space-MVT';\n\nexport const HotelSearchResultSummaryPanel = ({\n amenities,\n customCounterMessage,\n customCounterSRMessage,\n hotelCount,\n isFindingHotels,\n isConductricsLoaded,\n matchId,\n onFilterChange,\n saleFilter,\n visibleHotels,\n pageHeading1Title,\n showingHotelDivRef,\n}: {\n amenities?: AmenityItem[];\n customCounterMessage?: string;\n customCounterSRMessage?: string;\n hotelCount: number;\n isFindingHotels: boolean;\n isConductricsLoaded: boolean;\n matchId?: Maybe<string>;\n onFilterChange?: (activeFiltersState: ActiveFiltersState) => void;\n saleFilter?: { showSaleFilter: boolean; saleFilterCount: number };\n visibleHotels: string[];\n pageHeading1Title: string;\n showingHotelDivRef?: React.Ref<HTMLDivElement>;\n}) => {\n const { taggedConfig } = useConfigRule();\n const configShowMap = taggedConfig?.config['showMap'] as boolean;\n const { isListVisible, paginationIndex } = useAppState();\n const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n\n const { handleSMBSwitch, isSMBContextSwitchingEnabled } = useSmbToggle();\n const smbChecked = queryParameters?.smbRate || false;\n\n /* NHCSEARCH-5451 Vertical Space MVT */\n const { isSuggestedFiltersInHorizontalScroll } = useVerticalSpaceMVT();\n\n return (\n <>\n <div className=\"flex items-start justify-between\">\n {router.asPath.includes('/locations/') ? (\n <LocationsPageHeadingLevel1 title={pageHeading1Title} />\n ) : (\n <h1 className=\"mb-4 font-sans text-xl font-bold\">{pageHeading1Title}</h1>\n )}\n <MapListToggleButton showMapListToggleButton={configShowMap} className=\"md:hidden\" />\n </div>\n {isSMBContextSwitchingEnabled ? (\n <SMBProfileSwitcher\n className=\"mb-4\"\n onInputChange={handleSMBSwitch}\n isSmbChecked={smbChecked}\n />\n ) : null}\n {isSuggestedFiltersInHorizontalScroll ? null : (\n <SuggestedFilterButtons\n amenities={amenities}\n isConductricsLoaded={isConductricsLoaded}\n isFindingHotels={isFindingHotels}\n onFilterCriteriaChange={(activeFiltersState: ActiveFiltersState) => {\n if (onFilterChange) onFilterChange(activeFiltersState);\n }}\n visibleHotels={visibleHotels}\n matchId={matchId}\n saleFilter={saleFilter}\n />\n )}\n <LogInBanner />\n <div\n ref={showingHotelDivRef}\n tabIndex={-1}\n className=\"flex items-center justify-between pb-2\"\n >\n <HotelCounter\n count={hotelCount}\n customMessage={customCounterMessage}\n customSRMessage={customCounterSRMessage}\n currentPageIndex={paginationIndex}\n isListVisible={isListVisible}\n isLoading={isFindingHotels}\n />\n </div>\n </>\n );\n};\n","import type { IconNames } from '@dx-ui/osc-icon';\nimport Icon from '@dx-ui/osc-icon';\nimport cx from 'classnames';\n\nexport const InfoMessageBanner = ({\n bannerClassName,\n message,\n children,\n shouldCenterInfoIcon,\n iconClassName,\n iconName = 'info-circle',\n}: {\n message?: string;\n children?: React.ReactNode;\n shouldCenterInfoIcon?: boolean;\n bannerClassName?: string;\n iconClassName?: string;\n iconName?: (typeof IconNames)[number];\n}) => (\n <h2\n className={cx(\n 'mb-4 flex px-4 py-3 font-semibold leading-none',\n {\n 'bg-bg-primary': !bannerClassName,\n },\n bannerClassName\n )}\n >\n <div className={cx({ 'flex items-center': shouldCenterInfoIcon })}>\n <Icon name={iconName} variant=\"regular\" size=\"sm\" className={iconClassName} />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"pl-2 text-base\">{message}</span>\n {children}\n </div>\n </h2>\n);\n","import type { HotelType } from '../../../providers/app-provider/app-provider.types';\n\nexport const shouldDisplayBrandedHotels = (brandName: string | undefined): boolean => {\n if (brandName !== 'hilton-honors') {\n return true;\n }\n return false;\n};\n\nexport const getBrandedHotels = (\n hotelPageCards: HotelType[],\n brandCode: string | undefined,\n brandName: string | undefined\n): HotelType[] =>\n shouldDisplayBrandedHotels(brandName)\n ? hotelPageCards.filter((hotel) => hotel.brandCode === brandCode)\n : [];\n\nexport const getOtherHotels = (\n hotelPageCards: HotelType[],\n brandCode: string | undefined,\n brandName: string | undefined\n): HotelType[] =>\n shouldDisplayBrandedHotels(brandName)\n ? hotelPageCards.filter((hotel) => hotel.brandCode !== brandCode)\n : hotelPageCards;\n\n//link for no branded hotels found info banner that removes brand slug from uri\nexport const getInfoBannerURLWithBrandRemoved = ({\n baseUrl,\n path,\n locale = 'en',\n canonicalSlug = '',\n altSlugs = [],\n brandCode,\n}: {\n baseUrl: string;\n path: string;\n locale?: string;\n canonicalSlug?: string | null;\n altSlugs?: string[];\n brandCode?: string;\n}) => {\n //remove brand filter param from URL\n const newURL = path.replace(`&f-brandCodes=${brandCode}`, '');\n //remove slug from URL\n if (canonicalSlug && newURL.includes(canonicalSlug))\n return encodeURI(`${baseUrl}${locale}${newURL.replace(`${canonicalSlug}/`, '')}`);\n const slug = altSlugs?.find((slug) => newURL.includes(slug)) ?? '';\n return encodeURI(`${baseUrl}${locale}${newURL.replace(`${slug}/`, '')}`);\n};\n","import { useBrandDetails, useWrappedRouter } from '../../../hooks';\nimport { useTranslation } from 'next-i18next';\nimport { useAppState } from '../../../providers/app-provider';\nimport { InfoMessageBanner } from '../../info-message-banner/info-message-banner';\nimport { Link } from '@dx-ui/osc-link';\nimport { env } from '../../../constants';\nimport { getInfoBannerURLWithBrandRemoved } from '../list-view-utils/list-view-brand-banner.utils';\n\nexport type ListViewBrandBannerProps = {\n numBrandedHotels: number;\n brandCode: string | undefined;\n isDisplayBrandBanner?: boolean;\n isPageBrandFilterEnabled?: boolean;\n isEndOfResults?: boolean;\n};\n\nexport const ListViewBrandBanner = ({\n numBrandedHotels,\n brandCode,\n isDisplayBrandBanner,\n isPageBrandFilterEnabled,\n isEndOfResults = false,\n}: ListViewBrandBannerProps) => {\n const { pageType } = useAppState();\n const brandInfo = useBrandDetails({ brandCode });\n const { t } = useTranslation(['list-view-brand-banner', 'list-view']);\n const { isGlobal: isGlobalPage } = pageType;\n const {\n router: { asPath, locale },\n } = useWrappedRouter();\n\n const atLeastOneBrandedHotel = numBrandedHotels > 0;\n\n const infoBannerMessage = atLeastOneBrandedHotel\n ? t('list-view-brand-banner:endOfBrandedHotelsResults', { brandName: brandInfo.name })\n : t('list-view-brand-banner:couldNotFindHotelsInSearchArea', { brandName: brandInfo.name });\n\n const linkWithoutBrandSlug = pageType.isBrand ? (\n <Link\n url={getInfoBannerURLWithBrandRemoved({\n baseUrl: env.OHW_BASE_URL,\n path: asPath,\n locale,\n canonicalSlug: brandInfo.canonicalSlug,\n altSlugs: brandInfo.altSlugs,\n brandCode,\n })}\n className=\"px-2 text-sm font-normal\"\n >\n {t('exploreOtherHotelsLink')}\n </Link>\n ) : null;\n\n return isDisplayBrandBanner && isPageBrandFilterEnabled && isEndOfResults\n ? ((!!brandInfo?.isHotelBrand && !!brandInfo?.hasHotels) || isGlobalPage) && (\n <InfoMessageBanner message={infoBannerMessage}>{linkWithoutBrandSlug}</InfoMessageBanner>\n )\n : null;\n};\n","export * from './list-view-brand-banner';\n","import type { QueryParameters } from '../../constants';\n\nimport type { ShopMultiPropAvailPointsQuery } from '@dx-ui/queries-dx-shop-search-ui';\n\nexport const hasAgeBased = (\n queryParameters?: QueryParameters,\n pricing?: Record<string, ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0]>\n): boolean => {\n if (queryParameters)\n return Object.values(pricing || {}).filter((price) => price?.ageBasedPricing).length > 0;\n return false;\n};\n\nexport const hasChildAges = (queryParameters?: QueryParameters): boolean =>\n (queryParameters &&\n queryParameters.rooms\n .filter(({ children, childAges }) => {\n if (children > 0) {\n return (\n childAges &&\n typeof childAges !== 'number' &&\n childAges.filter(({ age }) => typeof age !== 'undefined').length !== children\n );\n }\n return false;\n })\n .filter(Boolean).length > 0) ||\n false;\n\nexport const hasTMTPRatesSelected = (queryParameters: QueryParameters): boolean =>\n queryParameters &&\n (queryParameters.employeeRate ||\n queryParameters.friendsAndFamilyRate ||\n queryParameters.ownerVIPRate);\n","import type { MapLanguage, BrandCode, SortByValues, Child } from '@dx-ui/framework-uri-builder';\nimport { searchUriBuilder } from '@dx-ui/framework-uri-builder';\nimport { RoomsModal } from '@dx-ui/osc-rooms';\nimport { parseISO } from 'date-fns';\nimport isNumber from 'lodash/isNumber';\nimport { useTranslation } from 'next-i18next';\nimport * as React from 'react';\nimport type { QueryParameters } from '../../constants';\nimport type { ShopMultiPropAvailQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useBrandDetails, useWrappedRouter } from '../../hooks';\nimport { getTARatingValue, getValidFilters, isPriceRangeValid } from '../filters/filter-utils';\nimport { hasAgeBased, hasChildAges, hasTMTPRatesSelected } from './age-based-modal-utils';\nimport { mapRatesToSearchUriBuilder } from '../osc-search-form/search-form.utils';\nimport { useAppState } from '../../providers/app-provider';\nimport type { FieldValues } from 'react-hook-form';\nimport { useFilterState } from '../../providers/filter-provider';\n\nconst AgeBasedModal = ({\n isAgeBasedModalOpen,\n setIsAgeBasedModalOpen,\n pricing,\n}: {\n isAgeBasedModalOpen: boolean;\n setIsAgeBasedModalOpen: React.Dispatch<React.SetStateAction<boolean>>;\n pricing?: Record<string, ShopMultiPropAvailQuery['shopMultiPropAvail'][0]>;\n}) => {\n const { t } = useTranslation(['hotel-card', 'osc-shop-form-wrapper']);\n const { hasConnectingRooms, selectedCurrency, sortType, shouldUsePoints } = useAppState();\n const activeFiltersState = useFilterState();\n\n const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n\n const isAgeBased = hasAgeBased(queryParameters, pricing) && hasChildAges(queryParameters);\n\n const { code: brandCode } = useBrandDetails({});\n\n React.useEffect(() => {\n if (isAgeBased) {\n setIsAgeBasedModalOpen(isAgeBased);\n }\n }, [queryParameters, pricing, isAgeBased, setIsAgeBasedModalOpen]);\n\n const roomInfo =\n queryParameters &&\n queryParameters.rooms.map((room) => ({\n adults: room.adults,\n kids: room.children,\n childAges: room.childAges?.map(({ age }) => ({ age: isNumber(age) ? age : '' })),\n }));\n\n const handleRoomInfoSubmit = (data: FieldValues) => {\n const roomInfo = data?.rooms?.map((room: { adults: number; children: Child[] }) => ({\n adults: room?.adults,\n children: room?.children,\n }));\n\n const path =\n window.location.pathname.split('/').includes('go-hilton') ||\n hasTMTPRatesSelected(queryParameters as QueryParameters)\n ? 'go-hilton'\n : 'search';\n\n if (queryParameters) {\n const { offerId, pnd, specPlan, fromId, travelAgentId, requestedRatesOnly } = queryParameters;\n\n const url = searchUriBuilder({\n brandCode: brandCode as keyof BrandCode,\n locale: router.locale as MapLanguage,\n urlParams: {\n content: queryParameters?.content,\n dates: {\n arrivalDate: parseISO(queryParameters.arrivalDate),\n departureDate: parseISO(queryParameters.departureDate),\n flexibleDates: queryParameters.datesFlex,\n },\n placeId: queryParameters.placeId,\n query: queryParameters.query,\n sortBy: sortType as SortByValues,\n f_amenityIds: getValidFilters(activeFiltersState?.amenityFilters),\n f_brandCodes: getValidFilters(activeFiltersState?.brandFilters),\n f_price: isPriceRangeValid(activeFiltersState?.priceFilter)\n ? activeFiltersState?.priceFilter\n : undefined,\n f_tripAdvisorRatings: getTARatingValue(activeFiltersState?.ratingsFilter),\n availableHotelsOnly: activeFiltersState?.showAvailableHotels,\n rates: {\n ...mapRatesToSearchUriBuilder(queryParameters, shouldUsePoints),\n ...(offerId ? { offerId } : {}),\n ...(pnd ? { pnd } : {}),\n ...(specPlan ? { spec_plan: specPlan.join(',') } : {}),\n ...(fromId ? { fromId } : {}),\n ...(travelAgentId ? { travelAgentId } : {}),\n ...(requestedRatesOnly ? { requestedRatesOnly } : {}),\n },\n numRooms: roomInfo?.length || 1,\n rooms: roomInfo,\n sessionToken: queryParameters.sessionToken,\n specialRateTokens: queryParameters.specialRateTokens,\n displayCurrency: selectedCurrency || '',\n adjoiningRoomStay: hasConnectingRooms,\n maxPoints: queryParameters.maxPoints,\n },\n path,\n relative: true,\n });\n\n window.location.href = url;\n }\n };\n\n return isAgeBasedModalOpen ? (\n <RoomsModal\n ageRange={{ min: 0, max: 18 }}\n agesRequired\n ariaLabel={t('hotel-card:roomModalAria')}\n isOpen\n occupancyLimitMessage={t('osc-shop-form-wrapper:maxGuestsSingleRoom')}\n onSubmit={handleRoomInfoSubmit}\n useFormProps={{\n defaultValues: {\n rooms: roomInfo?.map((room) => ({\n adults: room.adults,\n children: room.childAges.map((child) => ({\n age: child?.age,\n })),\n })),\n },\n }}\n />\n ) : null;\n};\n\nexport { AgeBasedModal };\n","export * from './age-based-modal';\n","export const setFocusOnFirstListViewCard = (\n ulContainerRef: React.MutableRefObject<HTMLDivElement | null>\n) => {\n const firstHotelCardItem = ulContainerRef?.current?.querySelector('li');\n if (firstHotelCardItem) {\n firstHotelCardItem.setAttribute('tabindex', '0');\n firstHotelCardItem.focus();\n }\n};\n","import { useMemo } from 'react';\nimport type { HotelType } from '../providers/app-provider/app-provider.types';\nimport {\n getBrandedHotels,\n getOtherHotels,\n} from '../components/list-view/list-view-utils/list-view-brand-banner.utils';\n\ntype GetVisibleInBoundHotelsProps = {\n currentPageVisibleHotels: HotelType[];\n brandCode: string | undefined;\n brandName: string | undefined;\n};\n\nexport const useGetVisibleInBoundHotels = ({\n currentPageVisibleHotels,\n brandCode,\n brandName,\n}: GetVisibleInBoundHotelsProps) => {\n const brandedVisibleHotels = useMemo(\n () => getBrandedHotels(currentPageVisibleHotels, brandCode, brandName),\n [currentPageVisibleHotels, brandCode, brandName]\n );\n\n const otherVisibleHotels = useMemo(\n () => getOtherHotels(currentPageVisibleHotels, brandCode, brandName),\n [currentPageVisibleHotels, brandCode, brandName]\n );\n\n return { brandedVisibleHotels, otherVisibleHotels };\n};\n","/* eslint-disable react/display-name */\nimport * as React from 'react';\n\nimport type { HotelImageRatio, Maybe } from '@dx-ui/queries-dx-shop-search-ui';\nimport { CarouselSingle } from '@dx-ui/osc-carousel';\nimport { getAspectRatioUrl } from '@dx-ui/utilities-images';\nimport { useRect } from '@dx-ui/utilities-use-rect';\nimport { env } from '../../constants';\nimport { useTranslation } from 'next-i18next';\n\nexport type IHotelImagesVariants =\n | {\n altText?: string | null;\n size?: 'xs' | 'sm' | 'md';\n ratios?: Maybe<Pick<HotelImageRatio, 'url' | 'size'>[]> | undefined;\n }\n | undefined;\n\ntype ICarousel = {\n images?: IHotelImagesVariants[];\n isLoading?: boolean;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst Carousel = ({ images, isLoading }: ICarousel) => {\n const carouselRef = React.useRef<HTMLDivElement | null>(null);\n const rect = useRect({ ref: carouselRef });\n\n const { t } = useTranslation(['osc-carousel']);\n const noPhotoImageUrl = `${env.HILTON_ASSETS_URI}/modules/assets/img/common/no-photo-available.png`;\n const carouselImages = images\n ?.map((props) => {\n const { imgUrl } = getAspectRatioUrl({\n src: props?.ratios?.[0]?.url,\n width: rect?.width ?? 0,\n });\n const src = props?.ratios?.[0]?.url ? imgUrl : null;\n return { alt: props?.altText || t('noPhotoAvailable'), url: src || noPhotoImageUrl };\n })\n .filter((image) => image.url);\n return carouselImages && carouselImages?.length >= 1 ? (\n <div ref={carouselRef}>\n <CarouselSingle\n data-testid=\"imageCarousel\"\n images={carouselImages || []}\n isLoading={isLoading}\n />\n </div>\n ) : null;\n};\n\nexport default Carousel;\n","export const WhyPropertySkeleton = ({ variants }: { variants: Record<string, boolean> }) => {\n return (\n <div className=\"h-40 w-full\">\n <div className=\"bg-bg-alt my-2 h-5 w-32 animate-pulse\" />\n\n {variants?.b ? (\n <>\n <div className=\"bg-bg-alt my-2 h-5 w-full animate-pulse\" />\n <div className=\"bg-bg-alt my-2 h-5 w-full animate-pulse\" />\n </>\n ) : null}\n {variants?.c ? (\n <div className=\" flex flex-wrap gap-2\">\n <div className=\"bg-bg-alt my-2 h-5 w-36 animate-pulse\" />\n <div className=\"bg-bg-alt my-2 h-5 w-36 animate-pulse\" />\n <div className=\"bg-bg-alt my-2 h-5 w-36 animate-pulse\" />\n </div>\n ) : null}\n <div className=\"bg-bg-alt my-2 h-5 w-32 animate-pulse\" />\n <div className=\" flex flex-wrap gap-2\">\n {Array(6)\n .fill(null)\n .map(() => (\n <div key={crypto.randomUUID()} className=\"bg-bg-alt h-5 w-28 animate-pulse\" />\n ))}\n </div>\n </div>\n );\n};\n","import Icon from '@dx-ui/osc-icon';\nimport { useHotelQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useTranslation } from 'next-i18next';\nimport type { DISTANCE_UNITS } from './constants/distance-units';\nimport type { HotelDistanceUnit, Maybe } from '@dx-ui/gql-types';\nimport { WhyPropertySkeleton } from './why-property-skeleton';\n\nexport const WhyProperty = ({\n ctyhocn,\n variants,\n}: {\n ctyhocn: string;\n variants: Record<string, boolean>;\n}) => {\n const { t } = useTranslation('hotel-card');\n /** TODO IMPLEMENTATION - using hotel query call similar to HDP for MVT b/c\n * serviceAmenities is not exposed on HSO query. If variant c is a winner,\n * we can exposed serviceAmenities on HSO and pass to this feature to avoid\n * making extra network calls and shimmer.\n */\n const { data, isLoading } = useHotelQuery({ ctyhocn, language: 'en' });\n\n if (isLoading) return <WhyPropertySkeleton variants={variants} />;\n\n const hotel = data?.hotel;\n const shortDesc = hotel?.facilityOverview?.shortDesc || '';\n const trimmedDesc = shortDesc.length > 140 ? `${shortDesc.slice(0, 140)}...` : shortDesc;\n const blurb = variants?.b ? trimmedDesc : null;\n const top3POI =\n variants?.c && hotel?.serviceAmenities\n ? hotel.serviceAmenities\n .sort((a, b) => {\n if (typeof a?.distance === 'number' && typeof b?.distance === 'number') {\n return a.distance - b.distance;\n }\n return 0;\n })\n ?.slice(0, 3)\n : null;\n\n return (\n <>\n <h4 className=\"py-3 text-sm font-bold\">{t('whatsNearby')}</h4>\n {blurb ? <div>{blurb}</div> : null}\n {top3POI ? (\n <div className=\"flex flex-wrap gap-2\">\n {top3POI.map((poi) => {\n const unitStringVariant:\n | (typeof DISTANCE_UNITS)[number]\n | undefined\n | Maybe<HotelDistanceUnit> =\n poi.distance && poi.distanceUnit && poi.distance > 1\n ? `${poi.distanceUnit}_other`\n : poi.distanceUnit;\n return (\n <div key={poi.name} className=\"flex items-center text-sm\">\n <Icon name=\"point-of-interest\" size=\"sm\" />\n {poi.name}{' '}\n {unitStringVariant\n ? t(`distanceUnits.${unitStringVariant}`, {\n distance: poi.distanceFmt || '',\n })\n : ''}\n </div>\n );\n })}\n </div>\n ) : null}\n <h4 className=\"py-3 text-sm font-bold\">{t('amenitiesWeProvide')}</h4>\n <div className=\"flex flex-wrap gap-2\">\n {hotel?.amenities?.slice?.(0, 6)?.map((amenity) => (\n <div key={amenity.name} className=\"flex items-center text-sm\">\n <Icon name=\"check\" size=\"sm\" /> {amenity?.name}\n </div>\n ))}\n </div>\n </>\n );\n};\n","import { Accordion } from '@dx-ui/osc-accordion';\nimport { useTranslation } from 'next-i18next';\nimport { WhyProperty } from './why-property';\nimport { GOALS, WHY_PROPERTY } from '../../../constants';\nimport { useGetMVTSelections } from '../../../hooks';\nimport { useRef } from 'react';\nimport { sendReward } from '@dx-ui/framework-conductrics';\n\nexport const WhyPropertyAccordion = ({ ctyhocn }: { ctyhocn: string }) => {\n const { t } = useTranslation('hotel-card');\n const whyPropertyAccordionRef = useRef(false);\n const { isMVTVariant } = useGetMVTSelections({\n agentId: WHY_PROPERTY.agentId,\n MVTVariants: ['b', 'c'],\n });\n const handleAccordionClick = () => {\n if (!whyPropertyAccordionRef.current) {\n sendReward(GOALS.whyBrandClicked);\n sendReward(GOALS.whyBrandTotalClicks);\n whyPropertyAccordionRef.current = true;\n }\n };\n const isWhyPropertyMvt = isMVTVariant.b || isMVTVariant.c;\n return isWhyPropertyMvt ? (\n <div className=\"mt-2 w-full\">\n <Accordion\n className=\"accordion-single text-sm\"\n items={[\n {\n content: <WhyProperty ctyhocn={ctyhocn} variants={isMVTVariant} />,\n key: 'whyProperty-accordion',\n collapsedButtonLabel: t('whyStayHere'),\n expandedButtonLabel: t('whyStayHere'),\n },\n ]}\n onValueChange={handleAccordionClick}\n type=\"multiple\"\n />\n </div>\n ) : null;\n};\n","import cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { COMPARE_ONBOARDING, GOALS } from '../../constants';\nimport { useLocalStorage, useMediaQuery } from 'usehooks-ts';\nimport { DESKTOP_COMPARE_LIMIT, MOBILE_COMPARE_LIMIT } from './compare-hotel-utils';\nimport { FeatureToolTip } from './feature-tool-tip';\nimport { useGetMVTSelections } from '../../hooks';\nimport { useRef } from 'react';\n\ntype CompareCheckboxProps = {\n ctyhocn?: string;\n onChange?: () => void;\n isFirstCheckbox?: boolean;\n};\n\nexport const CompareHotelsCheckbox = ({\n onChange,\n ctyhocn: selectedCtyhocn,\n isFirstCheckbox,\n}: CompareCheckboxProps) => {\n const { t } = useTranslation('compare-hotels');\n const isSubDesktop = useMediaQuery('(max-width: 1023px)');\n const compareCheckboxRef = useRef<HTMLInputElement>(null);\n\n const { hotelsToCompare, compareHotelsToggle: showCompareCheckBox } = useAppState();\n const dispatch = useAppDispatch();\n\n //NHCSEARCH-5449 | Compare Hotels Onboarding MVT\n const {\n isLoaded: isOnboardingMVTLoaded,\n isMVTVariant: { c: isOnboardingVarC },\n } = useGetMVTSelections({ agentId: COMPARE_ONBOARDING.agentId, MVTVariants: ['c'] });\n const [isOnboarded, setIsOnboarded] = useLocalStorage('compare-hotels-onboarded', false);\n const handleToolTipClose = () => {\n setIsOnboarded(true);\n if (compareCheckboxRef.current) compareCheckboxRef.current.focus();\n };\n\n const handleCompareHotelChange = () => {\n if (onChange) onChange();\n\n if (selectedCtyhocn) {\n let selectedHotels = [...hotelsToCompare];\n if (hotelsToCompare.includes(selectedCtyhocn))\n selectedHotels = hotelsToCompare?.filter((hotel) => hotel !== selectedCtyhocn);\n else selectedHotels.push(selectedCtyhocn);\n dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: selectedHotels });\n if (selectedHotels.length) sendReward(GOALS.compareHotelsCheckboxSelected);\n }\n if (!isOnboarded && isOnboardingVarC) setIsOnboarded(true);\n };\n const isCompareCBChecked = selectedCtyhocn ? !!hotelsToCompare?.includes(selectedCtyhocn) : false;\n //Disable checkbox when hotels selected is 2 for mobile and 5 selected for other large device\n const isCompareCBDisabled =\n !isCompareCBChecked &&\n (isSubDesktop\n ? hotelsToCompare?.length >= MOBILE_COMPARE_LIMIT\n : hotelsToCompare?.length === DESKTOP_COMPARE_LIMIT);\n\n return showCompareCheckBox ? (\n <div className=\"relative mr-0 pt-1.5 rtl:mb-2\">\n <div className=\"flex\">\n <label className=\"label label-inline-reverse rtl:label-inline-reverse\">\n <span className={cx('text-base font-semibold rtl:pl-2 rtl:pr-1')}>{t('compare')}</span>\n <input\n className=\"form-checkbox\"\n checked={isCompareCBChecked}\n disabled={isCompareCBDisabled}\n onChange={handleCompareHotelChange}\n type=\"checkbox\"\n ref={compareCheckboxRef}\n />\n </label>\n </div>\n {/* NHCSEARCH-5449 | Compare Hotels Onboarding MVT */}\n <FeatureToolTip\n absolutePosition=\"-left-5 bottom-9\"\n title={t('startComparing')}\n message={t('selectFirstHotel')}\n onDismiss={handleToolTipClose}\n cta={{ label: t('gotIt'), onClick: handleToolTipClose }}\n containerClass=\"w-[343px] p-3\"\n shouldShowFeatureToolTip={\n !!(isOnboardingMVTLoaded && isOnboardingVarC && !isOnboarded && isFirstCheckbox)\n }\n />\n </div>\n ) : null;\n};\n","import Icon, { AmenityIcons } from '@dx-ui/osc-icon';\nimport type { HotelAmenityId } from '@dx-ui/queries-dx-shop-search-ui';\n\ntype HotelAmenities = { name: string; id: string };\n\nconst KEY_AMENITIES = {\n freeParking: { id: 'freeParking', name: 'Free parking' },\n freeBreakfast: { id: 'freeBreakfast', name: 'Free breakfast' },\n indoorPool: { id: 'indoorPool', name: 'Indoor pool' },\n outdoorPool: { id: 'outdoorPool', name: 'Outdoor pool' },\n} as unknown as Record<string, HotelAmenities>;\n\nexport const KeyHotelAmenities = ({ amenities }: { amenities: HotelAmenityId[] | undefined }) => {\n const keyAmenities: HotelAmenities[] = [];\n amenities?.forEach((amenityId) => {\n if (Object.keys(KEY_AMENITIES).includes(amenityId)) {\n keyAmenities.push(KEY_AMENITIES[amenityId] as HotelAmenities);\n }\n });\n\n return keyAmenities?.length ? (\n <div className=\"flex flex-wrap gap-1.5 py-2.5 pb-1.5\" data-testid=\"key-hotel-amenities\">\n {keyAmenities.map((amenity: HotelAmenities) => (\n <div key={amenity.id} className=\"flex items-center gap-0.5 text-sm\">\n <Icon name={AmenityIcons[amenity.id as HotelAmenityId]} size=\"sm\" />\n <span> {amenity?.name}</span>\n </div>\n ))}\n </div>\n ) : null;\n};\n","import { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport type { Maybe, ShopMultiPropAvailPointsQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport Carousel from '../carousel/carousel';\nimport { HotelBadges } from './hotel-badges';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { useMediaQuery } from 'usehooks-ts';\nimport { TripAdvisorRating } from '../trip-advisor/trip-advisor-rating';\nimport { useMetrics } from '../../hooks';\nimport { WhyPropertyAccordion } from './why-property-mvt/why-property-accordion';\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport type { RateInfoMessage } from '../rate-name-cta/rate-name-cta';\nimport { RateNameCTA } from '../rate-name-cta/rate-name-cta';\nimport { useGetHotelInfo } from './hooks/use-get-hotel-info';\nimport { CompareHotelsCheckbox } from '../compare-hotels/compare-checkbox';\nimport { useRecentlyViewed } from '../../hooks/use-recently-viewed';\nimport { KeyHotelAmenities } from './key-hotel-amenity-info';\n\nconst preventNavigation = (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n e.preventDefault();\n};\nconst preventFocus = (e: React.FocusEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n e.target.blur();\n};\n\nconst HotelNameHeader = ({\n children,\n name,\n url,\n}: {\n children: React.ReactElement;\n name?: string | null;\n url?: Maybe<string>;\n}) => {\n if (url) {\n return (\n <>\n {/* This is a bit 'hacky'. We need a link in the page for SEO, but it is non-functional when JS is enabled */}\n <a\n aria-hidden=\"true\"\n className=\"cursor-default\"\n href={url}\n onClick={preventNavigation}\n onFocus={preventFocus}\n tabIndex={-1}\n >\n {children}\n </a>\n {/* For a11y, we're hiding the above link (since it behaves as text) and supplementing it with sr-only content */}\n <h3 className=\"sr-only\">{name}</h3>\n </>\n );\n }\n return children;\n};\n\ntype HotelCardProps = {\n distance?: string;\n isTALoadingState?: boolean;\n onDetailsClick?: () => void;\n showImages?: boolean;\n isListViewOnly?: boolean;\n priceInfo?: ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0] | null;\n hotelInfo?: HotelType | null | undefined;\n isFirstAvailableProperty?: boolean;\n};\n\nconst HotelCard = ({\n distance,\n isTALoadingState,\n onDetailsClick,\n showImages,\n isListViewOnly,\n priceInfo,\n hotelInfo,\n isFirstAvailableProperty,\n}: HotelCardProps) => {\n const { t } = useTranslation(['hotel-card']);\n const { pageType } = useAppState();\n const smMedViewPort = useMediaQuery('(min-width: 500px) and (max-width: 767px)');\n const metrics = useMetrics();\n const dispatch = useAppDispatch();\n\n const {\n amenities,\n badges,\n carouselImages,\n ctaLabel,\n ctaHref,\n ctaMessage,\n customParams,\n hotelUrl,\n isHotelDataLoading,\n masterImage,\n rateInfo,\n disclaimerMessages,\n transactionPropertyData,\n } = useGetHotelInfo({\n priceInfo,\n hotelInfo,\n additionalParams: { isHotelCard: true },\n });\n const hotelName = hotelInfo?.name || '';\n const tripAdvisorLocationSummary = hotelInfo?.tripAdvisorLocationSummary || null;\n const ctyhocn = hotelInfo?.ctyhocn;\n const classname = {\n rateNameClassName: 'mt-auto w-1/2 sm:w-full md:mt-0 md:w-3/5 xl:w-auto',\n propertyNameClassName: 'w-1/2 sm:w-full md:w-2/5 xl:flex-grow rtl:mr-2',\n hotelCardContentClassName: cx('flex w-full items-end', {\n 'sm:flex-col': !showImages && !isListViewOnly,\n 'sm:justify-end md:flex-row': showImages && !isListViewOnly,\n }),\n wrapperHotelCardHeaderAndCardContentClassName: cx(\n 'w-full content-end lg:grid lg:h-full lg:grid-cols-1',\n {\n 'px-2.5 py-1': showImages,\n }\n ),\n hotelCardImage: 'w-full justify-center flex',\n distanceClassName: cx('text-text-alt whitespace-nowrap text-xs font-normal', {\n hidden: !!pageType?.isGlobal,\n }),\n };\n\n const amexDisclaimer = disclaimerMessages?.find((disclaimer: RateInfoMessage) => {\n return disclaimer?.type === 'amexDisclaimer';\n })?.heading?.text;\n const { recentlyViewed, setRecentlyViewed, showRecentlyViewedChip } = useRecentlyViewed(\n ctyhocn as string\n );\n\n if (showRecentlyViewedChip) {\n badges?.push('view');\n }\n\n const handleOnRateNameCTAClick = () => {\n setRecentlyViewed({ ...recentlyViewed });\n if (transactionPropertyData) metrics.setPriceClicked(transactionPropertyData);\n };\n const setHighlightedMapCtyhocn = (ctyhocn: string | null) => {\n dispatch({ type: 'SET_HIGHLIGHTED_MAP_CTYHOCN', payload: ctyhocn });\n };\n const getHotelLocationName = () => {\n // In dream on a global page should display (city, state, Country) instead of distance marker\n const address = hotelInfo?.address;\n let location;\n let srLocation;\n if (pageType.isGlobal) {\n // Hotel location name\n location = address?.city;\n if (address?.city) location = address.city;\n if (address?.state) {\n location += location ? `, ${address.state}` : address.state;\n }\n if (address?.country) {\n location += location ? `, ${address.country}` : address.country;\n }\n //screen reader location text\n if (address?.city) srLocation = address.city;\n if (address?.stateName) {\n srLocation += srLocation ? `, ${address.stateName}` : address.stateName;\n }\n if (address?.countryName) {\n srLocation += srLocation ? `, ${address.countryName}` : address.countryName;\n }\n }\n return { location, srLocation };\n };\n const { location, srLocation } = getHotelLocationName();\n\n return (\n <li\n className=\"border-border flex w-full justify-self-center rounded-lg border\"\n data-testid={`hotel-card-${ctyhocn}`}\n onBlur={() => setHighlightedMapCtyhocn(ctyhocn || null)}\n onFocus={() => setHighlightedMapCtyhocn(null)}\n onMouseEnter={() => setHighlightedMapCtyhocn(ctyhocn || null)}\n onMouseLeave={() => setHighlightedMapCtyhocn(null)}\n >\n <div className=\"flex w-full flex-col lg:max-w-[343px] xl:max-w-[440px]\">\n {showImages && (\n <div className={classname.hotelCardImage} data-testid=\"hotel-card-image\">\n <div className=\"bg-bg-alt pb-2/3 relative h-0 w-full overflow-hidden rounded-t-lg\">\n <Carousel\n data-testid=\"listViewImageCarousel\"\n images={carouselImages ? carouselImages : [masterImage]}\n />\n </div>\n </div>\n )}\n <HotelNameHeader url={hotelUrl} name={hotelName}>\n <h3\n className={cx('w-full break-words px-2.5 pt-2.5 font-semibold leading-snug', {\n 'text-sm': smMedViewPort,\n 'text-base': !smMedViewPort,\n })}\n data-testid=\"listViewPropertyName\"\n id={`hotel-${ctyhocn}`}\n >\n {hotelName}\n </h3>\n </HotelNameHeader>\n {badges?.length ? (\n <div className=\"ps-2.5\">\n <HotelBadges badges={badges} />\n </div>\n ) : null}\n\n <div\n className={classname.wrapperHotelCardHeaderAndCardContentClassName}\n data-testid=\"wrapper-hotel-card-content\"\n >\n <div className={classname.hotelCardContentClassName} data-testid=\"hotel-card-content\">\n <div className={classname.propertyNameClassName}>\n <button\n className=\"btn-sm btn-primary-text block self-start font-semibold\"\n data-testid={`hotelDetails-${ctyhocn}`}\n onClick={onDetailsClick}\n type=\"button\"\n >\n <span>{t('hotelDetails')}</span>\n <span className=\"sr-only\"> {t('forHotel', { hotel: hotelName })}</span>\n <span aria-hidden> ></span>\n </button>\n <span className={classname.distanceClassName} data-testid=\"distanceMarker\">\n {distance}\n </span>\n <span className=\"sr-only\">{srLocation}</span>\n <span\n aria-hidden=\"true\"\n className=\"text-text-alt whitespace-nowrap text-xs font-normal\"\n data-testid=\"locationMarker\"\n >\n {location}\n </span>\n <TripAdvisorRating\n isLoadingState={isTALoadingState}\n showReviewCount={true}\n tripAdvisorLocationSummary={tripAdvisorLocationSummary}\n />\n </div>\n <div className={classname.rateNameClassName}>\n <RateNameCTA\n ctaHref={ctaHref || ''}\n ctaLabel={ctaLabel}\n ctaMessage={ctaMessage}\n customRateInfo={customParams}\n data-testid=\"priceInfo\"\n isLoading={isHotelDataLoading}\n rateMessages={rateInfo}\n onRateNameCTAClick={handleOnRateNameCTAClick}\n />\n </div>\n </div>\n {/* NHCSEARCH-5028 - Why Property MVT */}\n <WhyPropertyAccordion ctyhocn={ctyhocn || ''} />\n <KeyHotelAmenities amenities={amenities} />\n {!!customParams?.showCompare ? (\n <CompareHotelsCheckbox\n ctyhocn={ctyhocn || ''}\n isFirstCheckbox={isFirstAvailableProperty}\n />\n ) : null}\n {amexDisclaimer ? (\n <div\n className=\"flex-basis-full shrink-0 grow-0 pt-2.5 text-xs font-normal\"\n data-testid=\"amexDisclaimerMsg\"\n >\n {amexDisclaimer}\n </div>\n ) : null}\n </div>\n </div>\n </li>\n );\n};\n\nexport default HotelCard;\n","export default function HotelCardCTASkeleton() {\n return (\n <div\n aria-hidden\n className=\"flex h-full flex-col items-end justify-end space-y-2 pt-2\"\n data-testid=\"HotelCardCTASkeleton\"\n >\n <div className=\"bg-bg-alt h-8 w-16 animate-pulse\" />\n <div className=\"bg-bg-alt h-4 w-1/2 animate-pulse\" />\n <div className=\"bg-bg-alt h-10 w-32 animate-pulse rounded\" />\n </div>\n );\n}\n","import cx from 'classnames';\nimport HotelCardCTASkeleton from './hotel-card-cta-skeleton';\nimport { useMediaQuery } from 'usehooks-ts';\n\ntype HotelCardSkeletonProps = {\n isListViewOnly?: boolean;\n showImages?: boolean;\n};\n\nconst HotelCardSkeleton = ({ isListViewOnly, showImages }: HotelCardSkeletonProps) => {\n const isDesktop = useMediaQuery('(min-width: 1024px)');\n\n // Do not modify the classname string without notifying the team\n const classname = {\n wrapperHotelCardHeaderAndCardContentClassName: cx('w-full md:max-w-[440px]', {\n 'pl-0 py-2 md:pl-2 md:pr-2 pt-2 grow': showImages && !isDesktop,\n ' md:min-w-[343px]': showImages && isDesktop,\n 'pt-2 sm:w-5/7 sm:pt-0 sm:pl-4 md:w-3/4': showImages && isListViewOnly,\n }),\n hotelCardImage: 'flex-shrink-0 w-full',\n };\n\n return (\n <li\n className={cx(\n 'flex w-full min-w-[343px] flex-col justify-self-center rounded-lg md:max-w-[440px]',\n {\n ' last:mb-4': !isDesktop,\n }\n )}\n data-testid=\"hotel-card-skeleton\"\n >\n {/* Hotel Image placeholder */}\n {showImages && (\n <div className={classname.hotelCardImage} data-testid=\"hotel-card-image-shimmer\">\n <div className=\"bg-bg-alt pb-2/3 relative h-0 w-full animate-pulse overflow-hidden\" />\n </div>\n )}\n {/* Hotel Card Details Wrapper */}\n <div\n className={classname.wrapperHotelCardHeaderAndCardContentClassName}\n data-testid=\"wrapper-hotel-card-details-shimmer\"\n >\n {/* Hotel Header placeholder */}\n <div\n className=\"bg-bg-alt my-2 h-4 w-full animate-pulse leading-snug rtl:mr-2\"\n data-testid=\"listView-property-name-shimmer\"\n />\n {/* Hotel Card Details Wrapper */}\n <div className=\"flex\">\n <div className=\"w-1/2 sm:w-full md:w-3/5 xl:grow rtl:mr-2\">\n {/* Hotel Details placeholder */}\n <div\n className=\"bg-bg-alt mb-2 block h-4 w-24 animate-pulse self-start\"\n data-testid=\"hotel-details-button-shimmer\"\n />\n {/* Hotel Distance Marker placeholder */}\n <div\n className=\"bg-bg-alt h-4 w-16 animate-pulse whitespace-nowrap\"\n data-testid=\"distance-marker-shimmer\"\n />\n {/* Trip Advisor placeholder */}\n <div\n className=\"bg-bg-alt mt-2 h-4 w-32 animate-pulse\"\n data-testid=\"trip-advisor-rating-shimmer\"\n />\n {/* Trip Advisor Circle placeholder */}\n <div\n className=\"bg-bg-alt mt-2 h-4 w-20 animate-pulse\"\n data-testid=\"trip-advisor-circle-review-shimmer\"\n />\n {/* Trip Advisor Based on Reviews placeholder */}\n <div\n className=\"bg-bg-alt mt-2 h-4 w-28 animate-pulse\"\n data-testid=\"trip-advisor-reviews-shimmer\"\n />\n </div>\n {/* Hotel Details CTA shimmer */}\n <div className=\"flex w-1/2 shrink-0 justify-end overflow-hidden\">\n <HotelCardCTASkeleton />\n </div>\n </div>\n </div>\n </li>\n );\n};\n\nexport default HotelCardSkeleton;\n","import { forwardRef, useMemo, useState } from 'react';\n\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport { useTranslation } from 'next-i18next';\nimport type { GoogleCoordinate } from '../../utils';\nimport { getDistanceFromCenterFmt } from '../../utils';\nimport HotelCard from './hotel-card';\nimport HotelCardSkeleton from './hotel-card-skeleton';\nimport { useMetrics, useWrappedRouter } from '../../hooks';\n\nimport type { ShopMultiPropAvailQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useAppDispatch } from '../../providers/app-provider';\nimport {\n DEFAULT_HOTEL_CARD_SKELETON_COUNT,\n MAX_PROPERTIES_PER_LIST_VIEW_PAGE,\n} from '../../constants';\nimport { InfoMessageBanner } from '../info-message-banner/info-message-banner';\nimport { useGetPOIAirportInfoMVT } from './hooks/use-get-poi-airport-info-mvt';\n\nexport type IHotelCards = {\n hotels: HotelType[];\n pricing?: Record<string, ShopMultiPropAvailQuery['shopMultiPropAvail'][0]>;\n showImages: boolean;\n isListViewOnly?: boolean;\n isLoadingState?: boolean;\n centerCoordinate: GoogleCoordinate | null;\n cardsClassName?: string;\n initHotelCount?: number;\n} & React.HTMLAttributes<HTMLUListElement>;\n\nconst HotelCards = forwardRef<HTMLUListElement, IHotelCards>(\n (\n {\n hotels,\n pricing,\n showImages,\n isListViewOnly,\n isLoadingState,\n centerCoordinate,\n cardsClassName,\n initHotelCount,\n ...rest\n },\n forwardedRef\n ) => {\n const { t } = useTranslation(['hotel-card', 'rate-name-cta', 'locations-page']);\n const dispatch = useAppDispatch();\n const metrics = useMetrics();\n const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n\n //NHCSEARCH-5621\n const [enablePOIAndAirportTest, setEnablePOIAndAirporTest] = useState(false);\n useGetPOIAirportInfoMVT({ enableTest: enablePOIAndAirportTest });\n\n const handleDetailsClick = (ctyhocn: string, name: string, index: number) => {\n setEnablePOIAndAirporTest(true);\n dispatch({ type: 'SET_PDP_CTYHOCN', payload: ctyhocn });\n metrics.setBrandDetail({\n ctyhocn,\n view: 'List',\n name,\n index: index + 1,\n });\n };\n\n const skeletonCardCount = useMemo(() => {\n if (initHotelCount && initHotelCount > 0) {\n return initHotelCount && initHotelCount > MAX_PROPERTIES_PER_LIST_VIEW_PAGE\n ? MAX_PROPERTIES_PER_LIST_VIEW_PAGE\n : initHotelCount;\n }\n return DEFAULT_HOTEL_CARD_SKELETON_COUNT;\n }, [initHotelCount]);\n if (isLoadingState) {\n let cnt = 0;\n return (\n <ul ref={forwardedRef} {...rest} className={cardsClassName}>\n {Array.from({ length: skeletonCardCount }, () => (\n <HotelCardSkeleton\n key={cnt++}\n isListViewOnly={isListViewOnly}\n showImages={showImages}\n />\n ))}\n </ul>\n );\n }\n const keyString: string | undefined =\n Object.keys(rest).find((key) => key === 'data-testid') ?? '';\n\n const firstAvailableProperty = hotels.findIndex((hotel) =>\n router.asPath.includes('/search/')\n ? pricing?.[hotel?.ctyhocn]?.summary?.status?.type === 'AVAILABLE'\n : hotel?.display?.open && hotel?.leadRate?.lowest\n );\n const SoldOutInfoMessageBanner = () => {\n /* show property sold out info banner if specific searched property sold out */\n const hotelPlaceId = queryParameters?.placeId?.includes('dx-hotel')\n ? queryParameters?.placeId?.split('::')[1]?.toUpperCase()\n : null;\n const queryParam = queryParameters?.query?.toUpperCase();\n return (hotelPlaceId && pricing?.[hotelPlaceId]?.statusCode === 1740) ||\n (queryParam && pricing?.[queryParam]?.statusCode === 1740) ? (\n <InfoMessageBanner message={t('selectedHotelSoldOut')} />\n ) : null;\n };\n if (!hotels.length) return null;\n\n return (\n <>\n <SoldOutInfoMessageBanner />\n <ul\n key={`ulHotelCard-${keyString}`}\n ref={forwardedRef}\n {...rest}\n className={cardsClassName}\n >\n {hotels.map((hotel, _id) => {\n const { name, ctyhocn, localization } = hotel;\n const { distanceFmt } = getDistanceFromCenterFmt(\n t,\n centerCoordinate,\n localization?.coordinate,\n router.locale\n );\n const priceInfo = pricing && pricing[ctyhocn];\n\n return (\n <HotelCard\n key={`hotel-card-${ctyhocn}`}\n distance={distanceFmt}\n isTALoadingState={isLoadingState}\n isListViewOnly={isListViewOnly}\n onDetailsClick={() => handleDetailsClick(ctyhocn, name || '', _id)}\n showImages={showImages}\n priceInfo={priceInfo}\n hotelInfo={hotel}\n isFirstAvailableProperty={_id === firstAvailableProperty}\n />\n );\n })}\n </ul>\n </>\n );\n }\n);\n\nHotelCards.displayName = 'HotelCards';\n\nexport default HotelCards;\n","import { Pagination } from '@dx-ui/osc-pagination';\nimport { useRef, useState, useEffect, useMemo } from 'react';\nimport { useTranslation } from 'next-i18next';\n\nimport { useMetrics, useTrackSearchPricing, useWrappedRouter, useBrandDetails } from '../../hooks';\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport { ListViewBrandBanner } from './list-view-brand-banner';\nimport {\n DEFAULT_HOTEL_CARD_SKELETON_COUNT,\n MAX_PROPERTIES_PER_LIST_VIEW_PAGE,\n env,\n} from '../../constants';\nimport { AgeBasedModal } from '../../components/age-based-modal';\nimport type { GoogleCoordinate } from '../../utils';\nimport { getLengthOfStay } from '../../utils';\nimport { setFocusOnFirstListViewCard } from './list-view-utils/list-view.utils';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { useConfigRule } from '@dx-ui/framework-config-rule-provider';\nimport useShopMultiPropAvail from '../../hooks/use-shop-multi-prop-avail/use-shop-multi-prop-avail';\nimport { getInfoBannerURLWithBrandRemoved } from './list-view-utils/list-view-brand-banner.utils';\nimport { useGetVisibleInBoundHotels } from '../../hooks/use-get-visible-in-bound-hotels';\nimport { InfoMessageBanner } from '../info-message-banner/info-message-banner';\nimport { Link } from '@dx-ui/osc-link';\nimport HotelCards from '../hotel-card/hotel-cards';\nimport HotelCardSkeleton from '../hotel-card/hotel-card-skeleton';\nimport cx from 'classnames';\n\ntype ListViewProps = {\n isConductricsLoaded?: boolean;\n brandName?: string;\n brandCode?: string;\n centerCoordinate: GoogleCoordinate | null;\n isHSODataLoading?: boolean;\n onPageChanged?: (paginationIndex: number, pageSize: number) => void;\n sortedHotels: HotelType[];\n initHotelCount?: number;\n};\ntype IListViewLoadingShimmer = {\n isListViewOnly?: boolean;\n showImages?: boolean;\n cardsClassName?: string;\n cardCount?: number;\n};\n\n/*\n * List View Loading / Shimmer\n * Displays if hotel data is being fetched from backend\n */\nconst ListViewLoadingShimmer = ({\n isListViewOnly,\n showImages,\n cardsClassName,\n cardCount = DEFAULT_HOTEL_CARD_SKELETON_COUNT,\n}: IListViewLoadingShimmer) => {\n let cnt = 0;\n return (\n <ul className={cx(cardsClassName)}>\n {Array.from({ length: cardCount }, () => (\n <HotelCardSkeleton key={cnt++} isListViewOnly={isListViewOnly} showImages={showImages} />\n ))}\n </ul>\n );\n};\n\nexport const ListView = ({\n isConductricsLoaded,\n brandName,\n brandCode,\n centerCoordinate,\n isHSODataLoading,\n onPageChanged,\n sortedHotels,\n initHotelCount,\n}: ListViewProps) => {\n const {\n hasConnectingRooms,\n showHotelImages,\n paginationIndex,\n selectedCurrency,\n pageType,\n isListVisible,\n } = useAppState();\n const listRef = useRef<HTMLUListElement | null>(null);\n const { t } = useTranslation(['locations-page', 'list-view', 'list-view-brand-banner']);\n const metrics = useMetrics();\n const dispatch = useAppDispatch();\n\n const [isAgeBasedModalOpen, setIsAgeBasedModalOpen] = useState(false);\n const ulContainerRef = useRef<HTMLDivElement | null>(null);\n\n const { taggedConfig } = useConfigRule();\n // if show hotel images toggle is disabled always show images. Otherwise show images depending on toggle state\n const showImages = !taggedConfig?.config.showListViewHotelImagesToggle || !!showHotelImages;\n const isListViewOnly = !taggedConfig?.config['showMap'];\n\n const {\n safeQueryParams: queryParameters,\n router: { asPath, locale },\n } = useWrappedRouter();\n const { canonicalSlug, altSlugs, isHotelBrand } = useBrandDetails({ brandCode });\n\n const currentPageVisibleHotels = sortedHotels.slice(\n paginationIndex * MAX_PROPERTIES_PER_LIST_VIEW_PAGE,\n (paginationIndex + 1) * MAX_PROPERTIES_PER_LIST_VIEW_PAGE\n );\n const totalPages = Math.ceil(sortedHotels.length / MAX_PROPERTIES_PER_LIST_VIEW_PAGE);\n\n //guarantee we always fetch hotels in list view even if >150. Disable query if on locations page\n const { hashedData: pricing } = useShopMultiPropAvail({\n ctyhocns: currentPageVisibleHotels.map((hotel) => hotel.ctyhocn),\n mpaConstraints: true,\n });\n\n const showAmountAfterTax = useMemo(() => {\n return asPath.includes('/locations/')\n ? sortedHotels?.some((hotel) => !!hotel?.leadRate?.lowest?.cmaTotalPriceIndicator)\n : sortedHotels.some((hotel) =>\n Boolean(pricing[hotel.ctyhocn]?.summary?.lowest?.cmaTotalPriceIndicator)\n );\n }, [asPath, pricing, sortedHotels]);\n\n useTrackSearchPricing({\n isDateSearch: true,\n hotels: currentPageVisibleHotels,\n pricing,\n datesFlex: queryParameters?.datesFlex,\n selectedCurrency: selectedCurrency || '',\n lengthOfStay: getLengthOfStay(queryParameters?.departureDate, queryParameters?.arrivalDate),\n });\n\n const { brandedVisibleHotels, otherVisibleHotels } = useGetVisibleInBoundHotels({\n currentPageVisibleHotels,\n brandCode,\n brandName,\n });\n\n const shouldDisplayBrandBannerInCurrentPage = () => {\n const atLeastOneHotelNotBranded = otherVisibleHotels?.length > 0;\n const displayAtEndOfBrandPageResults = pageType.isBrand && paginationIndex === totalPages - 1;\n\n switch (true) {\n case displayAtEndOfBrandPageResults:\n return true;\n case pageType.isGlobal && atLeastOneHotelNotBranded:\n return true;\n default:\n return false;\n }\n };\n //call onPageChange if it exists and reset focus on first card if paginationIndex changes\n useEffect(() => {\n if (onPageChanged) onPageChanged(paginationIndex, MAX_PROPERTIES_PER_LIST_VIEW_PAGE);\n }, [onPageChanged, paginationIndex]);\n\n //reset focus on first card in list any time pagination changes\n useEffect(() => {\n if (paginationIndex > 0) setFocusOnFirstListViewCard(ulContainerRef);\n }, [paginationIndex]);\n\n const handlePagination = async (newPageIndex: number) => {\n dispatch({ type: 'SET_PAGINATION_INDEX', payload: newPageIndex });\n await metrics.trackPaginationClick({\n paginationNumber: `${newPageIndex + 1}`,\n actionType: !queryParameters ? 'categoryPagination' : 'searchAction',\n });\n };\n useEffect(() => {\n // setting setPaginationData separately for each flow (search & locations)\n // since search hotels will not load till conductrics is resolved\n if (isConductricsLoaded && totalPages > 0) {\n // due to string character limit constraints with Adobe,\n // we still want only first page results in the propertyResultList.\n // but propertyResults should reflect the total number of hotels returned.\n metrics.setPaginationData({\n totalPages: `${totalPages}`,\n propertyResultList: otherVisibleHotels.map((hotel) => hotel.ctyhocn).join(','),\n propertyResults: otherVisibleHotels.length,\n brandedHotels: brandedVisibleHotels\n .filter((hotel) => hotel.brandCode === brandCode)\n .map((hotel) => hotel.ctyhocn),\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isConductricsLoaded]);\n\n // if the current page is beyond the last page, set it to the last page\n const lastPageIndex = Math.max(totalPages - 1, 0); // go no lower than the first page\n if (paginationIndex > lastPageIndex && dispatch) {\n dispatch({ type: 'SET_PAGINATION_INDEX', payload: lastPageIndex });\n }\n const showHotelCardImage = !!pageType.isDreams || !!showImages;\n const classname = {\n cardsClassName:\n 'mb-4 grid justify-center gap-2 grid-cols-1 lg:grid-cols-2 lg:w-[694px] xl:w-[888px]',\n };\n const linkWithoutBrandSlug = pageType.isBrand ? (\n <Link\n url={getInfoBannerURLWithBrandRemoved({\n baseUrl: env.OHW_BASE_URL,\n path: asPath,\n locale,\n canonicalSlug,\n altSlugs,\n brandCode,\n })}\n className=\"px-2 text-sm font-normal\"\n >\n {t('list-view-brand-banner:exploreOtherHotelsLink')}\n </Link>\n ) : null;\n\n const skeletonCardCount = useMemo(() => {\n if (initHotelCount && initHotelCount > 0) {\n return initHotelCount && initHotelCount > MAX_PROPERTIES_PER_LIST_VIEW_PAGE\n ? MAX_PROPERTIES_PER_LIST_VIEW_PAGE\n : initHotelCount;\n }\n return DEFAULT_HOTEL_CARD_SKELETON_COUNT;\n }, [initHotelCount]);\n\n if (isHSODataLoading && sortedHotels?.length === 0)\n return (\n <ListViewLoadingShimmer\n isListViewOnly={isListViewOnly}\n showImages={showHotelCardImage}\n cardsClassName={classname.cardsClassName}\n cardCount={skeletonCardCount}\n />\n );\n\n // Returns Message when zero hotels are found to adjust search / map\n if (!isHSODataLoading && sortedHotels?.length === 0) {\n const noHotelsFoundBannerMessage = isHotelBrand\n ? t('list-view-brand-banner:couldNotFindHotelsInSearchArea', { brandName })\n : t('notFoundMessage');\n return (\n <InfoMessageBanner message={noHotelsFoundBannerMessage}>\n {linkWithoutBrandSlug}\n </InfoMessageBanner>\n );\n }\n\n return (\n <div ref={ulContainerRef} className={cx({ hidden: !isListVisible })}>\n {showAmountAfterTax ? <p className=\"block pb-2 \">{t('list-view:cmaPriceMessage')}</p> : null}\n {hasConnectingRooms && <InfoMessageBanner message={t('list-view:ccrPricingMessage')} />}\n {/* Child based pricing modal when at least one property in map requires child ages but arent specified by customer. but TBD about this location in code (at least no longer in hotel card)*/}\n <AgeBasedModal\n isAgeBasedModalOpen={isAgeBasedModalOpen}\n pricing={pricing}\n setIsAgeBasedModalOpen={setIsAgeBasedModalOpen}\n />\n <HotelCards\n aria-label={t('list-view:hotelSearchResults')}\n centerCoordinate={centerCoordinate}\n data-testid=\"hotelsList\"\n hotels={currentPageVisibleHotels || []}\n isListViewOnly={isListViewOnly}\n isLoadingState={isHSODataLoading}\n pricing={pricing}\n ref={listRef}\n showImages={showHotelCardImage}\n cardsClassName={classname.cardsClassName}\n initHotelCount={initHotelCount}\n />\n <ListViewBrandBanner\n brandCode={brandCode}\n isDisplayBrandBanner={shouldDisplayBrandBannerInCurrentPage()}\n isPageBrandFilterEnabled={pageType.isPageBrandFilterEnabled}\n numBrandedHotels={brandedVisibleHotels?.length}\n isEndOfResults={!isHSODataLoading && paginationIndex === lastPageIndex}\n />\n\n <div className=\"border-border border-y py-4\">\n <Pagination\n current={paginationIndex}\n onNextClick={() => handlePagination(paginationIndex + 1)}\n onPreviousClick={() => handlePagination(paginationIndex - 1)}\n total={totalPages}\n />\n </div>\n </div>\n );\n};\n","import { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { useIsClient, useMediaQuery } from 'usehooks-ts';\nimport cx from 'classnames';\nimport { Icon, type IconNames } from '@dx-ui/osc-icon';\nimport { useMapListToggle } from '../../hooks';\n\nexport const MapListToggleButton = ({\n showMapListToggleButton = true,\n className,\n}: {\n showMapListToggleButton?: boolean;\n className?: string;\n}) => {\n const { isListVisible } = useAppState();\n const dispatch = useAppDispatch();\n const isClient = useIsClient();\n const isSlimView = useMediaQuery('(max-width: 767px)');\n\n const { iconName: listMapViewButtonIconName, label: listMapViewButtonLabel } = useMapListToggle();\n const mapToggleButtonArrowDirection = listMapViewButtonIconName as (typeof IconNames)[number];\n\n return isClient && showMapListToggleButton ? (\n <button\n className={cx(\n 'btn flex items-center justify-center rtl:ml-0 rtl:mr-auto',\n {\n 'md:hidden btn-primary': isSlimView,\n ' btn-text-outline text-base text-text px-3 py-2 shadow-xl bg-bg hover:text-text focus:text-text':\n !isSlimView,\n },\n className\n )}\n onClick={() => {\n dispatch({ type: 'SET_IS_LIST_VISIBLE', payload: !isListVisible });\n }}\n type=\"button\"\n >\n {listMapViewButtonLabel}\n {!isSlimView ? <Icon name={mapToggleButtonArrowDirection} /> : null}\n </button>\n ) : null;\n};\n","import { useTranslation } from 'next-i18next';\n\nexport const ZoomInForPricing = () => {\n const { t } = useTranslation('zoom-in-for-additional-pricing');\n\n return (\n <span className=\"z-2 border-text-alt bg-text/75 text-text-inverse @[400px]:w-auto @[460px]:mt-3 absolute mt-4 w-28 text-wrap rounded-lg border px-2 py-0.5 text-center text-sm max-2xl:top-12\">\n {t('zoomInForAdditionalPricing')}\n </span>\n );\n};\n","export * from './zoom-in-for-pricing';\n","import { createContext, useContext } from 'react';\nimport type MarkerClusterer from '@googlemaps/markerclustererplus';\n\ntype IMapContext = {\n apiKey?: string;\n clusterer?: MarkerClusterer;\n infoWindow?: google.maps.InfoWindow;\n infoWindowContainer?: HTMLDivElement;\n map?: google.maps.Map;\n setClusterer: (clusterer?: MarkerClusterer) => void;\n setInfoWindow: (infoWindow?: google.maps.InfoWindow) => void;\n setInfoWindowContainer: (infoWindowContainer?: HTMLDivElement) => void;\n setMap: (map?: google.maps.Map) => void;\n};\n\nconst defaultContext: IMapContext = {\n apiKey: undefined,\n clusterer: undefined,\n infoWindow: undefined,\n infoWindowContainer: undefined,\n map: undefined,\n setClusterer: () => null,\n setInfoWindow: () => null,\n setInfoWindowContainer: () => null,\n setMap: () => null,\n};\n\nexport const MapContext = createContext<IMapContext>(defaultContext);\n\nexport const useMap = () => {\n const context = useContext(MapContext);\n if (context === undefined) {\n throw new Error('useMap must be used within an MapProvider');\n }\n return context;\n};\n","import type * as React from 'react';\nimport { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useMap } from './map.context';\n\ntype IMapInfoWindow = {\n children: React.ReactNode;\n /**\n * This event is fired when the close button is clicked.\n */\n onCloseClick?: () => void;\n position: google.maps.InfoWindowOptions['position'];\n};\n\n/**\n * Used as a wrapper to insert any React Component into\n */\nconst MapInfoWindow = ({ children, onCloseClick, position }: IMapInfoWindow) => {\n const { infoWindow, infoWindowContainer } = useMap();\n\n useEffect(() => {\n if (infoWindow) {\n if (position) {\n infoWindow.setPosition(position);\n }\n if (onCloseClick) {\n infoWindow.addListener('closeclick', onCloseClick);\n }\n }\n return () => {\n if (infoWindow) {\n google.maps.event.clearListeners(infoWindow, 'closeclick');\n }\n };\n }, [infoWindow, children, onCloseClick, position]);\n\n return infoWindowContainer ? createPortal(children, infoWindowContainer) : null;\n};\n\nexport default MapInfoWindow;\n","import type * as React from 'react';\n\nexport type MapMarkerColor = {\n active: string;\n inactive: string;\n};\n\nexport const MAP_MARKER_COLOR: Record<string, MapMarkerColor> = {\n POINTS_EXPLORER: { active: '#601b45', inactive: '#84235e' } as const,\n DEFAULT: { active: 'rgb(0 22 59)', inactive: 'rgb(0 47 97)' } as const,\n} as const;\n\nexport type IMapMarker = {\n /**\n * if `iconActive` is provided, this will switch to use that icon\n */\n isActive?: boolean;\n id: string | number;\n icon?: string;\n label?: string;\n children: React.ReactNode;\n color?: MapMarkerColor;\n /**\n * This event is fired when the marker is clicked.\n */\n onClick?: () => void;\n onMouseOver?: () => void;\n onMouseOut?: () => void;\n markerOptions?: google.maps.MarkerOptions;\n position: google.maps.MarkerOptions['position'];\n};\n\nconst MapMarker = ({ isActive, children }: IMapMarker) => (isActive ? children : null);\n\nexport default MapMarker;\n","import { useRef, useEffect } from 'react';\nimport { useMap } from './map.context';\n\nexport type IMapStaticMarker = {\n icon?: google.maps.MarkerOptions['icon'];\n position: google.maps.MarkerOptions['position'];\n shouldShowCenterMarker?: boolean;\n};\n\nconst MapStaticMarker = ({ icon = '', position, shouldShowCenterMarker }: IMapStaticMarker) => {\n const { map } = useMap();\n const centerMarker = useRef<google.maps.Marker | null>(null);\n\n useEffect(() => {\n if (map && position) {\n //if marker already drawn remove it.\n if (centerMarker.current) centerMarker.current.setMap(null);\n\n //draw new center marker on map\n // eslint-disable-next-line no-new\n centerMarker.current = shouldShowCenterMarker\n ? new google.maps.Marker({\n icon,\n map,\n position,\n })\n : null;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [icon, map, JSON.stringify(position)]);\n\n return null;\n};\n\nexport default MapStaticMarker;\n","import { useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport { useMap } from './map.context';\nimport type { IMapMarker, MapMarkerColor } from './map.marker';\nimport { MAP_MARKER_COLOR } from './map.marker';\nimport type { IMapStaticMarker } from './map.static-marker';\nimport type { ClusterIconStyle, MarkerClustererOptions } from '@googlemaps/markerclustererplus';\nimport MarkerClusterer from '@googlemaps/markerclustererplus';\n\nlet MARKER_Z_INDEX = 1;\n/**\n * Dynamically generates the price marker shape using SVG path syntax\n */\nconst getPriceMarkerPath: (width: number) => string = (width) => {\n const height = 15;\n const radius = 4;\n const tailHeight = 10;\n const tailWidth = 10;\n return `\n M 0 0\n l -${tailWidth / 2} -${tailHeight}\n h -${width / 2 - tailWidth / 2}\n a ${radius} ${radius} 0 0 1 -${radius} -${radius}\n v -${height}\n a ${radius} ${radius} 0 0 1 ${radius} -${radius}\n h ${width}\n a ${radius} ${radius} 0 0 1 ${radius} ${radius}\n v ${height}\n a ${radius} ${radius} 0 0 1 -${radius} ${radius}\n h -${width / 2 - tailWidth / 2}\n z`;\n};\n/**\n * Generates a marker with text overlayed on top of it\n * @param label - the text to display on the marker\n */\nconst getPriceMarker = (\n label: string,\n isActive: boolean,\n color?: MapMarkerColor\n): google.maps.Symbol => {\n const estimatedAverageCharacterWidth = 8;\n const width = label.length * estimatedAverageCharacterWidth;\n const defaultColor = MAP_MARKER_COLOR['DEFAULT'];\n return {\n path: getPriceMarkerPath(width),\n scale: 1,\n fillColor: isActive\n ? color?.active || defaultColor?.active\n : color?.inactive || defaultColor?.inactive,\n fillOpacity: 1,\n strokeColor: 'rgb(228 228 228)',\n strokeWeight: 1.2,\n labelOrigin: new google.maps.Point(0, -22),\n };\n};\n\ntype IMapMarkers = {\n children: React.ReactNode;\n clusterOptions?: MarkerClustererOptions;\n /**\n * If using an infoWindow, you must provide this prop in order to have it be closed when there is no active selection\n */\n activeMarker: IMapMarker['id'] | null;\n iconClusterPath?: ClusterIconStyle['url'];\n};\ntype ModifiedMarker = { id?: string } & google.maps.MarkerOptions;\n\nconst MapMarkers = ({ children, clusterOptions, activeMarker, iconClusterPath }: IMapMarkers) => {\n const { map, clusterer, setClusterer, infoWindow } = useMap();\n const { current: markers } = useRef<Map<string, ModifiedMarker>>(new Map());\n const [staticMarker, setStaticMarker] = useState<React.ReactNode>(null);\n\n const markersToDisplay = React.useMemo(\n () =>\n React.Children.map(children, (child) => {\n if (React.isValidElement<IMapMarker>(child)) {\n // this is reducing the time it takes the add/remove marker useEffect to run by just under 1 sec per run\n const { children: _children, ...propsWithoutChildren } = child.props;\n return propsWithoutChildren;\n }\n if (React.isValidElement<IMapStaticMarker>(child)) {\n setStaticMarker(child);\n }\n return null;\n })?.filter(Boolean) as IMapMarker[],\n [children]\n );\n const getMarker = (id?: IMapMarker['id']) =>\n markers.get(id as string) as google.maps.Marker | undefined;\n const addMarker = (m: IMapMarker) => {\n if (map && m) {\n const marker = new google.maps.Marker({\n id: m.id,\n icon: m.label\n ? getPriceMarker(m.label, !!m.isActive, m.color)\n : { url: m.icon, scaledSize: new google.maps.Size(22, 30) },\n label: m.label\n ? { text: m.label, color: '#ffffff', fontWeight: 'bold', fontFamily: 'Hilton Sans' }\n : undefined,\n position: m.position,\n optimized: false,\n visible: true,\n zIndex: MARKER_Z_INDEX++,\n clickable: true,\n ...m.markerOptions,\n } as ModifiedMarker);\n let originalZindex = marker.getZIndex();\n marker.addListener('mouseover', () => {\n originalZindex = marker.getZIndex();\n marker.setZIndex(MARKER_Z_INDEX + 1000);\n if (m.onMouseOver) {\n m.onMouseOver();\n }\n });\n marker.addListener('mouseout', () => {\n if (originalZindex) marker.setZIndex(originalZindex);\n if (m.onMouseOut) {\n m.onMouseOut();\n }\n });\n marker.addListener('click', () => {\n marker.setZIndex(MARKER_Z_INDEX + 1000);\n if (m.onClick) {\n m.onClick();\n }\n });\n markers.set(m.id as string, marker as ModifiedMarker);\n return marker;\n }\n };\n const removeMarker = (marker: google.maps.Marker) => {\n if (map && marker) {\n google.maps.event.clearListeners(marker, 'mouseover');\n markers.delete((marker as ModifiedMarker).id as string);\n return marker;\n }\n };\n\n useEffect(() => {\n if (map && infoWindow) {\n if (activeMarker) {\n const mapMarker = getMarker(activeMarker);\n if (mapMarker) {\n infoWindow.open({\n anchor: mapMarker as google.maps.MVCObject | google.maps.marker.AdvancedMarkerElement,\n map: map as google.maps.Map | google.maps.StreetViewPanorama,\n shouldFocus: false,\n });\n }\n } else {\n infoWindow.close();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, infoWindow, activeMarker]);\n\n useEffect(() => {\n const shouldHaveCluster = iconClusterPath || clusterOptions;\n if (map) {\n if (shouldHaveCluster && !clusterer) {\n setClusterer(\n new MarkerClusterer(map, [], {\n averageCenter: true,\n minimumClusterSize: 4,\n maxZoom: 9,\n ignoreHidden: true,\n styles: [\n {\n textSize: 16,\n textColor: '#fff',\n url: iconClusterPath,\n height: 53,\n width: 53,\n anchorText: [16, 0],\n },\n ],\n ...(clusterOptions || {}),\n })\n );\n return;\n }\n\n // markers to update\n markersToDisplay.forEach((m) => {\n const marker = getMarker(m.id);\n if (marker) {\n // Anything that changes a label will require re-setting both label and icon on existing markers. Also update marker if icon state changes (no price => price marker for example)\n marker.setIcon(\n m.label\n ? getPriceMarker(m.label, !!m.isActive, m.color)\n : { url: m.icon || '', scaledSize: new google.maps.Size(22, 30) }\n );\n if (m.label !== marker.getLabel())\n if (m.label)\n marker.setLabel({\n text: m.label,\n color: '#ffffff',\n fontWeight: 'bold',\n fontFamily: 'Hilton Sans',\n });\n else marker.setLabel(null);\n }\n });\n // markers to add (exclude any marker w/out an id as it doesnt represent a ctyhocn)\n const markersToAdd = markersToDisplay\n .filter(({ id }) => !getMarker(id as string))\n .map((m) => addMarker(m))\n .filter((m) => m !== undefined && !!(m as ModifiedMarker).id) as google.maps.Marker[];\n if (clusterer) {\n clusterer.addMarkers(markersToAdd);\n } else {\n markersToAdd.forEach((m) => {\n m?.setMap(map);\n });\n }\n // markers to remove\n const toRemove = [...markers]\n .filter(([id, _marker]) => !markersToDisplay.find((m) => m.id === id))\n .map(([_id, marker]) => removeMarker(marker as google.maps.Marker))\n .filter((m) => m !== undefined);\n\n if (clusterer) {\n clusterer.removeMarkers(toRemove);\n } else {\n toRemove.forEach((m) => {\n m.setMap(null);\n });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, iconClusterPath, clusterOptions, clusterer, markersToDisplay]);\n\n return (\n <>\n {staticMarker}\n {children}\n </>\n );\n};\n\nexport default MapMarkers;\n","import type * as React from 'react';\nimport Image from 'next/legacy/image';\nimport { Link } from '@dx-ui/osc-link';\nimport { useMediaQuery } from 'usehooks-ts';\nimport cx from 'classnames';\n\nexport type InfoWindowProps = {\n /**Full address of the property */\n address?: string | null;\n /**Brand code to render brand logo bug */\n brandCode?: string;\n /** pill badges that flag exceptional attributes of the property such as\n * if a property is new or having a sale\n */\n hotelBadges?: React.ReactNode;\n /** Add additional Custom tailwind styling for info-window container */\n containerClassName?: string;\n /** Property ctyhocn */\n ctyhocn: string | null;\n /**Directions object -\n * title - sting that will display as link text, suggest to pass returned t function string value.\n * uri - link URI\n */\n directionsLink?: {\n linkCopy: string;\n url: string;\n };\n /** hotel name to be used as info-window title and logo bug alt*/\n name?: string | null;\n} & React.ComponentProps<'div'>;\n\nexport const InfoWindow = ({\n address,\n brandCode,\n children,\n containerClassName,\n ctyhocn,\n directionsLink,\n hotelBadges,\n name,\n}: InfoWindowProps) => {\n const isMobile = useMediaQuery('(max-width: 640px)');\n\n return (\n <div className={cx('max-w-sm bg-[#ffffff] text-[#121212] shadow-sm', containerClassName)}>\n <div\n className=\"flex max-w-xs rtl:flex-row-reverse\"\n data-testid={`${ctyhocn}-mapMarkerContent`}\n >\n {brandCode ? (\n <div className=\"order-first flex size-8 items-center text-center sm:size-12 rtl:order-last\">\n <Image\n alt={`${name || ctyhocn} logo`}\n className=\"object-contain\"\n src={`/modules/assets/svgs/logos/bug/${brandCode}.svg`}\n height={isMobile ? 32 : 48}\n width={isMobile ? 32 : 48}\n />\n </div>\n ) : null}\n <div className=\"flex flex-col items-start text-left\">\n {name ? <div className=\"w-full px-2 py-1 text-sm font-bold\">{name}</div> : null}\n {hotelBadges ? <div className=\"px-2 \">{hotelBadges}</div> : null}\n {address ? <div className=\"w-full px-2 py-1 text-xs\">{address}</div> : null}\n {directionsLink?.url && directionsLink?.linkCopy ? (\n <Link url={directionsLink.url} isNewWindow={true} className=\"px-2 text-xs sm:text-sm\">\n {directionsLink.linkCopy}\n </Link>\n ) : null}\n {children}\n </div>\n </div>\n </div>\n );\n};\n\nexport default InfoWindow;\n","export * from './map-info-window';\n","export * from './info-window';\n","export * from './lib';\n","import { useCallback, useMemo } from 'react';\n\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport { isAffiliateHotel, useMetrics, useRenovationChip, useWrappedRouter } from '../../hooks';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport type { GoogleCoordinate } from '../../utils';\nimport {\n getCMAPrice,\n getLengthOfStay,\n isSpecialRatesDeeplinked,\n prefixPublicAssetUriWithAppPrefix,\n} from '../../utils';\nimport { isLocalCurrencySameAsHotelCurrency } from '../hotel-card/utils/hotel-info-utils';\nimport MapInfoWindow from './map.info-window';\nimport MapMarker, { MAP_MARKER_COLOR } from './map.marker';\nimport MapStaticMarker from './map.static-marker';\nimport MapMarkers from './map.markers';\nimport type { HotelBadgeTypes } from '../hotel-card/hotel-badges';\nimport { HotelBadges } from '../hotel-card/hotel-badges';\nimport { InfoWindow } from '@dx-ui/osc-map';\nimport { formatAndConvertPrice, useCurrencyConversion } from '@dx-ui/osc-currency-converter';\nimport useShopMultiPropAvail from '../../hooks/use-shop-multi-prop-avail/use-shop-multi-prop-avail';\nimport { MAX_PRICE_PROPERTY_LIMIT } from '../../constants';\n\nexport const SearchMapMarkers = ({\n centerCoordinate,\n matchId,\n sortedHotels,\n}: {\n centerCoordinate: GoogleCoordinate | null;\n matchId?: string | null;\n sortedHotels: HotelType[];\n}) => {\n const visibleHotels = sortedHotels\n ?.slice(0, MAX_PRICE_PROPERTY_LIMIT - 1)\n ?.map((hotel) => hotel.ctyhocn);\n\n const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n\n const hasSpecialRatesDeepLinked = useMemo(\n () => isSpecialRatesDeeplinked(queryParameters),\n [queryParameters]\n );\n const { hashedData: hashedMPAData, isLoading: isMPADataLoading } = useShopMultiPropAvail({\n ctyhocns: visibleHotels,\n enabled: hasSpecialRatesDeepLinked,\n });\n\n const {\n activeProperty,\n selectedCurrency,\n selectedCtyhocn,\n shouldUsePoints,\n pageType,\n hasSpecialRate,\n } = useAppState();\n const { currenciesError, currenciesMap } = useCurrencyConversion();\n const dispatch = useAppDispatch();\n const metrics = useMetrics();\n const { isPointsExplorer } = pageType;\n const { renoChipConfig } = useRenovationChip();\n\n const handleMapMarkerClicked = useCallback(\n (ctyhocn: string, name?: string | null) => {\n dispatch({ type: 'SET_PDP_CTYHOCN', payload: ctyhocn });\n metrics.setBrandDetail({\n ctyhocn,\n view: 'Map',\n name: name || '',\n index: 1,\n });\n },\n [dispatch, metrics]\n );\n const showPointsInMarker = !hasSpecialRate && shouldUsePoints;\n const propertySearch = matchId?.includes('dx-hotel::');\n return (\n <MapMarkers\n activeMarker={activeProperty || selectedCtyhocn}\n iconClusterPath=\"/modules/assets/svgs/map/cluster/HI.svg\"\n >\n {/** Do not render static center marker if specific property searched */}\n <MapStaticMarker\n icon={prefixPublicAssetUriWithAppPrefix('/assets/map-pin-active.png')}\n position={centerCoordinate}\n shouldShowCenterMarker={!propertySearch}\n />\n {!isMPADataLoading &&\n sortedHotels.map(\n ({ address, brandCode, localization, ctyhocn, name, leadRate, amenityIds, display }) => {\n const badges: HotelBadgeTypes[] = [];\n if (hashedMPAData?.[ctyhocn]?.summary?.lowest?.ratePlan?.attributes?.includes('sale'))\n badges.push('sale');\n if (amenityIds.includes('newHotel')) badges.push('new');\n if (renoChipConfig?.includes(ctyhocn)) badges.push('recentlyRenovated');\n\n const position = {\n lat: localization?.coordinate?.latitude || 0,\n lng: localization?.coordinate?.longitude || 0,\n };\n const hasConfidentialRate =\n hashedMPAData?.[ctyhocn]?.summary?.lowest?.ratePlan?.confidentialRates;\n const currentHotel = hashedMPAData[ctyhocn];\n const isNotBookable =\n hashedMPAData &&\n currentHotel &&\n ((currentHotel.summary?.status?.type === 'NOT_AVAILABLE' &&\n !queryParameters?.datesFlex) ||\n currentHotel.summary?.status?.type === 'NOT_OPEN');\n\n // do not display prices/points when flexDates enabled or avail status is effectively not bookable. Fallback to price if pts not avail\n const displayPriceInMarker =\n !isNotBookable && !queryParameters?.datesFlex && !hasConfidentialRate;\n const displayPointsInMarker = showPointsInMarker && displayPriceInMarker;\n const { totalRate, totalRateFmt } = getCMAPrice({\n cmaTotalPriceIndicator:\n hashedMPAData?.[ctyhocn]?.summary?.lowest?.cmaTotalPriceIndicator,\n rateAmount: hashedMPAData?.[ctyhocn]?.summary?.lowest?.rateAmount,\n rateAmountFmt: hashedMPAData?.[ctyhocn]?.summary?.lowest?.rateAmountFmt,\n totalRate: hashedMPAData?.[ctyhocn]?.summary?.lowest?.amountAfterTax,\n totalRateFmt: hashedMPAData?.[ctyhocn]?.summary?.lowest?.amountAfterTaxFmt,\n lengthOfStay: getLengthOfStay(\n queryParameters?.departureDate,\n queryParameters?.departureDate\n ),\n });\n\n const markerPrice = hasConfidentialRate\n ? undefined\n : isLocalCurrencySameAsHotelCurrency(\n selectedCurrency,\n localization?.currencyCode || ''\n )\n ? totalRateFmt\n : formatAndConvertPrice({\n basePrice: !totalRate ? undefined : totalRate,\n currencyQueryError: !!currenciesError,\n fromCurrency: currenciesMap?.get('USD'),\n language: router.locale,\n toCurrency: currenciesMap.get(selectedCurrency || ''),\n }) || totalRateFmt;\n\n const markerPointsOrPrice =\n hashedMPAData?.[ctyhocn]?.summary?.hhonors?.dailyRmPointsRateFmt || markerPrice;\n\n const pointsRangeLabel = leadRate?.hhonors\n ? `${leadRate?.hhonors.min?.dailyRmPointsRateRoundFmt} - ${leadRate?.hhonors.max?.dailyRmPointsRateRoundFmt}`\n : '';\n const markerLabel =\n sortedHotels.length > 150\n ? undefined\n : displayPointsInMarker\n ? isPointsExplorer\n ? pointsRangeLabel\n : markerPointsOrPrice\n : displayPriceInMarker\n ? markerPrice\n : undefined;\n\n const isActive = activeProperty === ctyhocn || selectedCtyhocn === ctyhocn;\n const suppressBrandLogo = isAffiliateHotel(display);\n const icon =\n isActive && !isNotBookable && !isPointsExplorer\n ? prefixPublicAssetUriWithAppPrefix('/assets/map-pin-active.png')\n : isActive && isNotBookable && !isPointsExplorer\n ? prefixPublicAssetUriWithAppPrefix('/assets/map-pin-alt-active.png')\n : isNotBookable && !isPointsExplorer\n ? prefixPublicAssetUriWithAppPrefix('/assets/map-pin-alt.png')\n : prefixPublicAssetUriWithAppPrefix('/assets/map-pin.png');\n\n return (\n <MapMarker\n isActive={isActive}\n color={\n !!isPointsExplorer ||\n (!!showPointsInMarker &&\n hashedMPAData?.[ctyhocn]?.summary?.hhonors?.dailyRmPointsRateFmt)\n ? MAP_MARKER_COLOR['POINTS_EXPLORER']\n : undefined\n }\n icon={icon}\n id={ctyhocn}\n key={`map-marker-item-${ctyhocn}`}\n label={markerLabel || undefined}\n onClick={() => handleMapMarkerClicked(ctyhocn, name)}\n onMouseOut={() => dispatch({ type: 'UNSET_HIGHLIGHTED_MAP_CTYHOCN' })}\n onMouseOver={() =>\n dispatch({ type: 'SET_HIGHLIGHTED_MAP_CTYHOCN', payload: ctyhocn })\n }\n position={position}\n >\n <MapInfoWindow\n onCloseClick={() => dispatch({ type: 'SET_PDP_CTYHOCN', payload: null })}\n position={position}\n >\n <InfoWindow\n address={address ? `${address.addressLine1}, ${address.city}` : ''}\n brandCode={suppressBrandLogo ? undefined : brandCode || 'HI'}\n ctyhocn={ctyhocn}\n hotelBadges={<HotelBadges badges={badges} />}\n name={name || ''}\n containerClassName='w-56 sm:w-fit !font-[\"Hilton_Sans\"]'\n />\n </MapInfoWindow>\n </MapMarker>\n );\n }\n )}\n </MapMarkers>\n );\n};\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { useMap } from './map.context';\nimport { MAPS_URL, MAX_ZOOM } from '../../constants';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport { useRouter } from 'next/router';\nimport { getLanguageDirection } from '@dx-ui/utilities-get-language-direction';\nimport styles from './map.module.css';\nimport { useHotelQuadrantsQuery } from '@dx-ui/queries-dx-shop-search-ui';\n\ntype IMap = {\n children?: React.ReactNode;\n /**\n * setting `initialBounds` will use the google maps api method `fitBounds()` to set the zoom and center of the map\n */\n initialBounds?: google.maps.LatLngBoundsLiteral;\n /**\n * supports all options from https://developers.google.com/maps/documentation/javascript/reference/map#MapOptions\n */\n options?: google.maps.MapOptions;\n /**\n * whenever the map is panned or zoomed, the bounds of the map are changed.\n */\n onBoundsChange?: (bounds: google.maps.LatLngBoundsLiteral) => void;\n /**\n * whenever the map is panned, the bounds of the map are changed.\n */\n onPan?: (bounds: google.maps.LatLngBoundsLiteral) => void;\n /**\n * whenever the map is zoomed, the bounds of the map are changed.\n */\n onZoom?: () => void;\n /**\n * for development, it is nice to see the bounds that are passed for the initial view\n */\n showInitialBounds?: boolean;\n /**\n * for debug, see quad node boundaries and additional debug info\n */\n showQuadNodeBounds?: boolean;\n};\n/**\n * This is the base for the Google Maps JavaScript API\n *\n * https://developers.google.com/maps/documentation/javascript/reference/map\n */\nexport const MapBase = ({\n children,\n initialBounds,\n options,\n onBoundsChange,\n onPan,\n onZoom,\n showInitialBounds,\n showQuadNodeBounds,\n}: IMap) => {\n const { apiKey, setMap, setInfoWindow, setInfoWindowContainer, map } = useMap();\n const mapRef = useRef<HTMLDivElement>(null);\n const infoWindowRef = useRef<HTMLDivElement>(null);\n const hasDrawnInitialBoundingBox = useRef(false);\n const hasDrawnInitialQuadNodes = useRef(false);\n const router = useRouter();\n const resetMap = useRef(true); // reset map on every search 'Update' cta click\n const isMapInitialized = useRef(false);\n\n const { data: quadNodesData } = useHotelQuadrantsQuery(\n {},\n {\n enabled: isBrowser,\n }\n );\n\n useEffect(() => {\n const listeners: google.maps.MapsEventListener[] = [];\n\n const initMap = () => {\n // empty the array, but keep the reference\n listeners.length = 0;\n const map = new google.maps.Map(mapRef.current as HTMLDivElement, {\n clickableIcons: false,\n disableDefaultUI: true,\n zoomControl: true,\n zoomControlOptions: {\n position:\n getLanguageDirection(router.locale) === 'rtl'\n ? google.maps.ControlPosition.LEFT_TOP\n : google.maps.ControlPosition.RIGHT_TOP,\n },\n restriction: {\n latLngBounds: { north: 85, south: -85, west: -180, east: 180 },\n strictBounds: true,\n },\n maxZoom: MAX_ZOOM,\n ...options,\n });\n\n if (onBoundsChange) {\n listeners.push(\n map.addListener('bounds_changed', () => {\n const bounds = map.getBounds();\n if (bounds) {\n onBoundsChange(bounds.toJSON());\n }\n })\n );\n }\n if (onPan) {\n listeners.push(\n map.addListener('dragend', () => {\n const bounds = map.getBounds();\n if (bounds) {\n onPan(bounds.toJSON());\n }\n })\n );\n }\n if (onZoom) {\n const handleTilesLoaded = () => {\n if (!isMapInitialized.current) {\n isMapInitialized.current = true;\n listeners.push(map.addListener('zoom_changed', () => onZoom()));\n }\n };\n listeners.push(map.addListener('tilesloaded', handleTilesLoaded));\n }\n setMap(map);\n\n if (infoWindowRef.current) {\n setInfoWindowContainer(infoWindowRef.current);\n const newInfoWindow = new google.maps.InfoWindow({\n content: infoWindowRef.current,\n disableAutoPan: true,\n });\n setInfoWindow(newInfoWindow);\n }\n };\n\n if (!window.google) {\n const script = document.createElement('script');\n script.src = `${MAPS_URL}&key=${apiKey}&language=${router.locale}`;\n script.defer = true;\n script.async = true;\n\n script.onload = initMap;\n document.body.appendChild(script);\n } else {\n initMap();\n }\n\n return () => {\n listeners.forEach((listener) => listener.remove());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //if bounds changes due to shallow route re-calc bounds!\n React.useEffect(() => {\n if (initialBounds && map && resetMap) {\n map.setZoom(9);\n map.fitBounds(initialBounds);\n resetMap.current = false;\n }\n router.events.on('routeChangeComplete', () => {\n resetMap.current = true;\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(initialBounds), map, resetMap.current]);\n\n //Show debug initial bounds bbox\n React.useEffect(() => {\n if (showInitialBounds && map && initialBounds && !hasDrawnInitialBoundingBox.current) {\n // eslint-disable-next-line no-new\n new google.maps.Rectangle({ map, bounds: initialBounds, strokeWeight: 1, fillOpacity: 0.1 });\n hasDrawnInitialBoundingBox.current = true;\n }\n }, [showInitialBounds, map, initialBounds]);\n\n //Show debug of hotel quad nodes\n React.useEffect(() => {\n if (\n showQuadNodeBounds &&\n map &&\n !hasDrawnInitialQuadNodes.current &&\n quadNodesData?.hotelQuadrants\n ) {\n quadNodesData?.hotelQuadrants?.forEach((node) => {\n //rectangle representing node\n new google.maps.Rectangle({\n map,\n bounds: {\n south: Math.max(node?.bounds?.southwest?.latitude ?? -89.99, -89.99),\n west: Math.max(node?.bounds?.southwest?.longitude ?? -179.99, -179.99),\n north: Math.min(node?.bounds?.northeast?.latitude ?? 89.99, 89.99),\n east: Math.min(node?.bounds?.northeast?.longitude ?? 179.99, 179.99),\n },\n strokeWeight: 1,\n fillOpacity: 0.1,\n });\n //debug info corresponding to node\n new google.maps.Marker({\n position: {\n lat:\n ((node?.bounds?.northeast?.latitude ?? -89.99) +\n (node?.bounds?.southwest?.latitude ?? 89.99)) /\n 2,\n lng:\n ((node?.bounds?.northeast?.longitude ?? 179.99) +\n (node?.bounds?.southwest?.longitude ?? -179.99)) /\n 2,\n },\n map,\n label: {\n className: styles.node_debug_info,\n text: node?.id || 'no id',\n } as string | google.maps.MarkerLabel,\n });\n });\n hasDrawnInitialQuadNodes.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, quadNodesData?.hotelQuadrants]);\n\n return (\n <>\n <div\n className=\"absolute left-0 m-0 size-full p-0 md:top-0\"\n id=\"searchGoogleMaps\"\n ref={mapRef}\n />\n <div data-testid=\"mapMarker\" ref={infoWindowRef} />\n {children}\n </>\n );\n};\n","import type * as React from 'react';\nimport { useState } from 'react';\nimport { MapContext } from './map.context';\nimport type MarkerClusterer from '@googlemaps/markerclustererplus';\n\ntype MapProviderProps = { apiKey: string; children: React.ReactNode };\n\nconst MapProvider = ({ apiKey, children }: MapProviderProps) => {\n const [clusterer, setClusterer] = useState<MarkerClusterer>();\n const [infoWindow, setInfoWindow] = useState<google.maps.InfoWindow>();\n const [infoWindowContainer, setInfoWindowContainer] = useState<HTMLDivElement>();\n const [map, setMap] = useState<google.maps.Map>();\n\n return (\n <MapContext.Provider\n value={{\n apiKey,\n clusterer,\n infoWindow,\n infoWindowContainer,\n map,\n setClusterer,\n setInfoWindow,\n setInfoWindowContainer,\n setMap,\n }}\n >\n {children}\n </MapContext.Provider>\n );\n};\n\nexport default MapProvider;\n","import { env } from '../../constants';\nimport { useWrappedRouter } from '../../hooks';\nimport { MapBase } from './map.base';\nimport MapProvider from './map.provider';\n\nexport const Map = ({\n handleBoundsChange,\n hasUserPanned,\n hasUserZoomed,\n initialBounds,\n children,\n}: {\n handleBoundsChange: (newBounds: google.maps.LatLngBoundsLiteral) => void;\n hasUserPanned: React.MutableRefObject<boolean>;\n hasUserZoomed: React.MutableRefObject<boolean>;\n initialBounds: google.maps.LatLngBoundsLiteral;\n children: React.ReactNode;\n}) => {\n const { safeQueryParams: queryParameters } = useWrappedRouter();\n\n return (\n <MapProvider apiKey={env.MAP_API_KEY}>\n <MapBase\n initialBounds={initialBounds}\n onBoundsChange={(bounds) => handleBoundsChange(bounds)}\n onPan={() => {\n // need to know if user interacted with the map\n hasUserPanned.current = true;\n }}\n onZoom={() => (hasUserZoomed.current = true)}\n showInitialBounds={queryParameters?.showBbox}\n showQuadNodeBounds={queryParameters?.isDebugQuadTrees as boolean}\n >\n {children}\n </MapBase>\n </MapProvider>\n );\n};\n","import { useCallback } from 'react';\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport { isAffiliateHotel, useMetrics, useRenovationChip, useWrappedRouter } from '../../hooks';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { prefixPublicAssetUriWithAppPrefix } from '../../utils';\nimport { isLocalCurrencySameAsHotelCurrency } from '../hotel-card/utils/hotel-info-utils';\nimport MapInfoWindow from './map.info-window';\nimport MapMarker, { MAP_MARKER_COLOR } from './map.marker';\nimport MapStaticMarker from './map.static-marker';\nimport MapMarkers from './map.markers';\nimport { getMapMarkerIcon, getMarkerPrice } from './map.utils';\nimport { InfoWindow } from '@dx-ui/osc-map';\nimport type { HotelBadgeTypes } from '../hotel-card/hotel-badges';\nimport { HotelBadges } from '../hotel-card/hotel-badges';\nimport { formatAndConvertPrice, useCurrencyConversion } from '@dx-ui/osc-currency-converter';\n\nexport const LocationsMapMarkers = ({\n centerCoordinate,\n hotelsInBounds,\n visibleHotels,\n}: {\n centerCoordinate: {\n lat: number;\n lng: number;\n };\n hotelsInBounds: Record<string, HotelType>;\n visibleHotels: string[];\n}) => {\n const { activeProperty, selectedCurrency, selectedCtyhocn, shouldUsePoints } = useAppState();\n const { currenciesError, currenciesMap } = useCurrencyConversion();\n const dispatch = useAppDispatch();\n const metrics = useMetrics();\n const { router } = useWrappedRouter();\n const { renoChipConfig } = useRenovationChip();\n const disableMarkerPrice = !!(visibleHotels.length > 150);\n\n const handleMapMarkerClicked = useCallback(\n (ctyhocn: string, name?: string | null) => {\n dispatch({ type: 'SET_PDP_CTYHOCN', payload: ctyhocn });\n metrics.setBrandDetail({\n ctyhocn,\n view: 'Map',\n name: name || '',\n index: 1,\n });\n },\n [dispatch, metrics]\n );\n\n return (\n <MapMarkers\n activeMarker={activeProperty || selectedCtyhocn}\n iconClusterPath=\"/modules/assets/svgs/map/cluster/HI.svg\"\n >\n <MapStaticMarker\n icon={prefixPublicAssetUriWithAppPrefix('/assets/map-pin-active.png')}\n position={centerCoordinate}\n shouldShowCenterMarker={true}\n />\n {visibleHotels.map((hotelCtyhocn) => {\n const hotel = hotelsInBounds[hotelCtyhocn];\n if (hotel) {\n const {\n ctyhocn,\n localization,\n brandCode: hotelBrandCode,\n name,\n address,\n amenityIds,\n } = hotel;\n\n const badges: HotelBadgeTypes[] = [];\n if (amenityIds.includes('newHotel')) badges.push('new');\n if (renoChipConfig?.includes(ctyhocn)) badges.push('recentlyRenovated');\n\n const coordinate = localization?.coordinate || null;\n const price =\n currenciesMap.size &&\n !isLocalCurrencySameAsHotelCurrency(\n selectedCurrency || '',\n hotel?.localization?.currencyCode || ''\n )\n ? formatAndConvertPrice({\n basePrice: !hotel?.leadRate?.lowest?.rateAmount\n ? undefined\n : hotel.leadRate?.lowest?.rateAmount,\n currencyQueryError: !!currenciesError,\n fromCurrency: currenciesMap?.get('USD'),\n language: router.locale,\n toCurrency: currenciesMap.get(selectedCurrency || ''),\n }) || hotel?.leadRate?.lowest?.rateAmountFmt\n : hotel?.leadRate?.lowest?.rateAmountFmt;\n const points = hotel?.leadRate?.hhonors?.lead?.dailyRmPointsRateNumFmt;\n\n if (!coordinate) return null;\n const position = { lat: coordinate.latitude, lng: coordinate.longitude };\n const isActive = activeProperty === ctyhocn || selectedCtyhocn === ctyhocn;\n const suppressBrandLogo = isAffiliateHotel(hotel?.display);\n return (\n // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\n <MapMarker\n isActive={isActive}\n color={\n !!shouldUsePoints && !!points ? MAP_MARKER_COLOR['POINTS_EXPLORER'] : undefined\n }\n icon={prefixPublicAssetUriWithAppPrefix(\n getMapMarkerIcon(isActive, disableMarkerPrice)\n )}\n id={ctyhocn}\n key={`map-marker-item-${ctyhocn}`}\n label={getMarkerPrice(disableMarkerPrice, shouldUsePoints, points, price)}\n onClick={() => handleMapMarkerClicked(ctyhocn, name)}\n onMouseOut={() => dispatch({ type: 'UNSET_HIGHLIGHTED_MAP_CTYHOCN' })}\n onMouseOver={() =>\n dispatch({ type: 'SET_HIGHLIGHTED_MAP_CTYHOCN', payload: ctyhocn })\n }\n position={position}\n >\n <MapInfoWindow\n onCloseClick={() => dispatch({ type: 'SET_PDP_CTYHOCN', payload: null })}\n position={position}\n >\n <InfoWindow\n address={address ? `${address.addressLine1}, ${address.city}` : ''}\n brandCode={suppressBrandLogo ? undefined : hotelBrandCode || 'HI'}\n ctyhocn={ctyhocn}\n hotelBadges={<HotelBadges badges={badges} />}\n name={name || ''}\n containerClassName='w-56 sm:w-fit !font-[\"Hilton-Sans\"]'\n />\n </MapInfoWindow>\n </MapMarker>\n );\n }\n return null;\n })}\n </MapMarkers>\n );\n};\n","import { MapListToggleButton } from '../map-list-toggle-button/map-list-toggle-button';\nimport { Spinner } from '@dx-ui/osc-spinner';\nimport { ZoomInForPricing } from '../zoom-in-for-pricing';\nimport { SearchMapMarkers } from './map.markers.search';\nimport { MAX_PRICE_PROPERTY_LIMIT } from '../../constants';\nimport { Map } from './map';\nimport { useAppState } from '../../providers/app-provider';\nimport { HotelSearchResultSummaryPanel } from '../hotel-search-result-summary/hotel-search-result-summary';\nimport { useConductricsSelection } from '@dx-ui/framework-conductrics';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport type { ActiveFiltersState } from '../filters/filter.constants';\nimport type { MutableRefObject, RefObject } from 'react';\nimport type { DebouncedState } from 'usehooks-ts';\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport { useWrappedRouter, useMapListToggle } from '../../hooks';\nimport { LocationsMapMarkers } from './map.markers.locations';\n// eslint-disable-next-line lodash/import-scope\nimport type { DebouncedFunc } from 'lodash';\nimport type { AmenityItem } from '../filters/suggested-filters';\nimport type { Maybe } from '@dx-ui/gql-types';\nimport { useConfigRule } from '@dx-ui/framework-config-rule-provider';\n\ntype MapProps = {\n showSpinner: boolean | undefined;\n visibleFilteredInBoundHotels: string[];\n handleBoundsChange:\n | DebouncedState<(newBounds: google.maps.LatLngBoundsLiteral) => void>\n | DebouncedFunc<(newBounds: google.maps.LatLngBoundsLiteral) => void>;\n hasUserPanned: MutableRefObject<boolean>;\n hasUserZoomed: MutableRefObject<boolean>;\n initialBounds:\n | {\n south: number;\n west: number;\n north: number;\n east: number;\n }\n | google.maps.LatLngBoundsLiteral;\n sortedHotels?: HotelType[];\n filterChange: (activeFiltersState: Partial<ActiveFiltersState>) => void;\n saleFilterCount?: number | undefined;\n showSaleFilter?: boolean;\n isFindingHotels: boolean;\n h1SearchResultsContent?: string;\n hotelCounterRef: RefObject<HTMLDivElement>;\n pageHeading1Title?: string;\n centerCoordinate: {\n lat: number;\n lng: number;\n };\n amenities: AmenityItem[] | undefined;\n matchId?: Maybe<string>;\n counterMessage?: {\n customCounterMessage: string;\n customCounterSRMessage: string;\n };\n};\nexport const MapBlock = ({\n showSpinner,\n visibleFilteredInBoundHotels,\n handleBoundsChange,\n hasUserPanned,\n hasUserZoomed,\n initialBounds,\n sortedHotels,\n filterChange,\n saleFilterCount,\n showSaleFilter,\n isFindingHotels,\n h1SearchResultsContent,\n hotelCounterRef,\n pageHeading1Title,\n amenities,\n matchId,\n centerCoordinate,\n counterMessage,\n}: MapProps) => {\n const { isListVisible, hotelsInBounds } = useAppState();\n const { isSlimView, isDesktopMapView } = useMapListToggle();\n const { t } = useTranslation('search-page');\n const {\n router: { asPath },\n } = useWrappedRouter();\n const isSearchPage = asPath.includes('/search/');\n const { taggedConfig } = useConfigRule();\n const shouldShowMap = isSearchPage ? !!taggedConfig?.config['showMap'] : true;\n const { isLoaded: isConductricsLoaded } = useConductricsSelection('');\n\n return (\n shouldShowMap && (\n <div\n className={cx('@container z-0 h-screen text-center max-md:w-full', {\n 'max-md:invisible absolute md:sticky md:top-0': isListVisible,\n 'max-sm:z-1 relative': !isListVisible,\n 'relative overflow-hidden': isDesktopMapView,\n })}\n data-testid=\"mapContainer\"\n >\n {/* Map/List toggle button */}\n {shouldShowMap && !isListVisible && (\n <HotelSearchResultSummaryPanel\n amenities={amenities}\n customCounterMessage={counterMessage?.customCounterMessage}\n customCounterSRMessage={counterMessage?.customCounterSRMessage}\n hotelCount={sortedHotels?.length ?? 0}\n isFindingHotels={isFindingHotels}\n isConductricsLoaded={isConductricsLoaded}\n matchId={matchId}\n onFilterChange={(activeFiltersState: ActiveFiltersState) =>\n filterChange(activeFiltersState)\n }\n pageHeading1Title={\n pageHeading1Title ??\n t('searchResults', {\n name: h1SearchResultsContent,\n })\n }\n saleFilter={{\n showSaleFilter: !!showSaleFilter,\n saleFilterCount: saleFilterCount ?? 0,\n }}\n visibleHotels={visibleFilteredInBoundHotels}\n showingHotelDivRef={hotelCounterRef}\n />\n )}\n <div className={cx('relative h-full overflow-hidden')}>\n <div className=\"absolute top-3 z-20 ltr:left-3 rtl:right-3\">\n <MapListToggleButton showMapListToggleButton={!isSlimView} />\n </div>\n\n {showSpinner && (\n <div\n className={cx('z-1 bg-bg absolute ml-4 mt-4 p-2 rtl:mr-4', {\n 'top-12': !isSlimView,\n })}\n >\n <Spinner className=\"text-hilton-alt\" size=\"lg\" />\n </div>\n )}\n {/* Show zoom in overlay on map if we have > 150 hotels on map */}\n {visibleFilteredInBoundHotels.length > MAX_PRICE_PROPERTY_LIMIT ? (\n <div className=\"flex justify-center\">\n <ZoomInForPricing />\n </div>\n ) : null}\n <Map\n handleBoundsChange={handleBoundsChange}\n hasUserPanned={hasUserPanned}\n hasUserZoomed={hasUserZoomed}\n initialBounds={initialBounds}\n >\n {isSearchPage && sortedHotels ? (\n <SearchMapMarkers\n centerCoordinate={centerCoordinate}\n matchId={matchId}\n sortedHotels={sortedHotels}\n />\n ) : (\n <LocationsMapMarkers\n centerCoordinate={centerCoordinate}\n hotelsInBounds={hotelsInBounds}\n visibleHotels={visibleFilteredInBoundHotels}\n />\n )}\n </Map>\n </div>\n </div>\n )\n );\n};\n","import type * as React from 'react';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport { useIsClient } from 'usehooks-ts';\nimport getBreakpoint from '../../utils/get-breakpoint';\nimport type { LabelValue } from '../../utils';\n\ntype DropdownProps = {\n options: LabelValue[];\n handleChange: (event: React.ChangeEvent<HTMLSelectElement>) => void;\n value?: string | number | readonly string[];\n label: string;\n};\nconst Dropdown = ({ options, handleChange, value, label }: DropdownProps) => {\n const isClient = useIsClient();\n const isMobile = isBrowser && window.innerWidth < (getBreakpoint('sm', true) as number);\n\n return isClient ? (\n <div className=\"z-1 ml-2 mr-1 w-32 text-sm md:ml-0 md:w-64\" data-testid=\"sortByDropdown\">\n <label\n className=\"label mr-1 flex h-7 justify-center whitespace-nowrap pb-1 text-xs font-semibold tracking-tight md:text-sm rtl:mx-0\"\n htmlFor=\"selectSortBy\"\n >\n {label}\n </label>\n <select\n aria-label={label}\n className=\"form-select w-32 text-sm leading-4 md:w-full md:text-base\"\n data-testid=\"selectSortBy\"\n id=\"selectSortBy\"\n name={label}\n onChange={(evt) => handleChange(evt)}\n role=\"presentation\"\n style={{ ...(isMobile && { margin: 0 }) }}\n title={label}\n value={value}\n >\n {options?.map(\n (option) =>\n !!option.isVisible && (\n <option\n data-testid={option.testIdLabel}\n disabled={option.isDisabled}\n key={option.value}\n value={option.value}\n >\n {option.label}\n </option>\n )\n )}\n </select>\n </div>\n ) : null;\n};\n\nexport default Dropdown;\n","import type * as React from 'react';\nimport type { SortByDropDownValues } from '../../utils';\nimport { isSortByPoints, isSortByPrice } from '../../utils';\nimport Dropdown from './dropdown-ui';\nimport { useMetrics, useGetSortByOptions } from '../../hooks';\nimport { useTranslation } from 'next-i18next';\nimport { useAppState, useAppDispatch } from '../../providers/app-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { GOALS } from '../../constants';\n\ntype SortByDropDownProps = {\n isInvalidOrUnavailableOffer?: boolean;\n onChange?: () => void;\n filteredHotelCount?: number;\n};\n\nexport const SortByDropDown = ({\n filteredHotelCount,\n isInvalidOrUnavailableOffer,\n onChange,\n}: SortByDropDownProps) => {\n const { t } = useTranslation('sort-by-drop-down');\n const { sortType, shouldUsePoints } = useAppState();\n const dispatch = useAppDispatch();\n\n const metrics = useMetrics();\n\n const { sortByOptions: sortOptions } = useGetSortByOptions({\n filteredHotelsCount: filteredHotelCount,\n isInvalidOrUnavailableOffer,\n });\n\n const handleUsePointsOnSortChange = (sortBy: SortByDropDownValues) => {\n //When switching to -> Points andshouldUsePointsis not selected, force usePoints select\n if (isSortByPoints(sortBy) && !shouldUsePoints) {\n dispatch({ type: 'SET_USE_POINTS', payload: true });\n }\n //When switching to -> Price andshouldUsePointsis selected, force usePoints de-select\n if (isSortByPrice(sortBy) && shouldUsePoints) {\n dispatch({ type: 'SET_USE_POINTS', payload: false });\n }\n return;\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n dispatch({ type: 'SET_SORT_TYPE', payload: event.target.value as SortByDropDownValues });\n dispatch({ type: 'SET_PAGINATION_INDEX', payload: 0 });\n sendReward(GOALS.sortEngagement);\n metrics.propertySearchSort(event.target.value);\n if (onChange) {\n onChange();\n }\n handleUsePointsOnSortChange(event.target.value as SortByDropDownValues);\n };\n\n if (sortType === null || !sortOptions.length) return null;\n\n return (\n <Dropdown\n handleChange={handleChange}\n label={t('label')}\n options={sortOptions}\n value={sortType}\n />\n );\n};\n","export * from './sort-by-drop-down';\n","import { useAuth } from '@dx-ui/framework-auth-provider';\nimport { useWrappedRouter } from '../../../hooks';\nimport { useTranslation } from 'next-i18next';\nimport { useEffect, useRef } from 'react';\nimport cx from 'classnames';\n\nexport const PointsMessage = ({ className }: { className?: string }) => {\n const { guestInfo } = useAuth();\n const { t } = useTranslation('use-points');\n const { router } = useWrappedRouter();\n const pointsAvailable = guestInfo?.hhonors?.summary?.points;\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (ref?.current && router.query?.['pointsLogin']) return ref.current.focus();\n }, [router.query]);\n\n return (\n <div className={cx('text-tier-diamond text-sm font-bold', className)} ref={ref} tabIndex={-1}>\n <span className=\"sr-only\" aria-live=\"assertive\">\n {t('numPoints_a11y', { numPoints: pointsAvailable })}\n </span>\n <span aria-hidden=\"true\" className=\"text-nowrap\">\n {t('numPoints', { numPoints: pointsAvailable })}\n </span>\n </div>\n );\n};\n","import { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { LoginIFrame, type LoginResponse } from '@dx-ui/osc-login';\nimport { generateSigninUrl, persistSessionState } from '../../utils';\nimport { useCallback } from 'react';\nimport { useAuth } from '@dx-ui/framework-auth-provider';\nimport { env } from '../../constants';\nimport { useWrappedRouter } from '../../hooks';\nimport { useAppState } from '../../providers/app-provider';\nimport { useFilterState } from '../../providers/filter-provider';\n\nexport const LoginModal = ({\n onClose,\n onLogin,\n showLoginModal,\n title,\n}: {\n onClose: () => void;\n onLogin?: () => void;\n showLoginModal: boolean;\n title: string;\n}) => {\n const { login } = useAuth();\n const { router } = useWrappedRouter();\n const { shouldUsePoints, selectedCurrency, sortType } = useAppState();\n const activeFiltersState = useFilterState();\n const lang = router.locale as string;\n const forgetInfoUrl = env.PARTNER_FORGET_INFO_LINK.replace('/__LANG__/', `/${lang}/`);\n const options = {\n showCreatePassword: false,\n forgetInfoLink: { url: forgetInfoUrl },\n secureInfoLink: { url: env.GLOBAL_PRIVACY_URL },\n signInLink: { url: generateSigninUrl(router.asPath, lang) },\n };\n const onSignInAttempt = useCallback(\n async (resp: LoginResponse) => {\n persistSessionState({ shouldUsePoints, selectedCurrency, sortType, activeFiltersState });\n if (resp?.data) {\n await login(resp);\n }\n },\n [activeFiltersState, login, selectedCurrency, shouldUsePoints, sortType]\n );\n const handleLogin = async (resp: LoginResponse) => {\n await onSignInAttempt?.(resp);\n if (!resp.error) {\n onClose();\n onLogin?.();\n }\n };\n return (\n <Dialog isOpen={showLoginModal} onDismiss={onClose} size=\"md\" title={title}>\n <LoginIFrame\n data-testid=\"loginIframe\"\n frameSrc={generateSigninUrl(router?.asPath, lang)}\n options={options}\n onLoginAttempt={handleLogin}\n onClose={onClose}\n title={title}\n />\n </Dialog>\n );\n};\n","import { useAuth } from '@dx-ui/framework-auth-provider';\nimport { DISPLAY_NUM_OF_AVAILABLE_POINTS, GOALS } from '../../../constants';\nimport { useGetMVTSelections, useWrappedRouter } from '../../../hooks';\nimport { useAppState } from '../../../providers/app-provider';\nimport { Trans, useTranslation } from 'next-i18next';\n\nimport { useState } from 'react';\nimport { LoginModal } from '../../login-modal/login-modal';\nimport { PointsMessage } from './points-message';\nimport { logError } from '@dx-ui/framework-logger';\nimport { sendReward } from '@dx-ui/framework-conductrics';\n\nexport const DisplayPoints = () => {\n const { t } = useTranslation('use-points');\n const { shouldUsePoints } = useAppState();\n const { isAuthenticated } = useAuth();\n const [showLoginModal, setShowLoginModal] = useState(false);\n const { router } = useWrappedRouter();\n\n const {\n isLoaded,\n isMVTVariant: { b: isMVT },\n } = useGetMVTSelections({\n agentId: DISPLAY_NUM_OF_AVAILABLE_POINTS.agentId,\n isProvisional: shouldUsePoints,\n });\n\n const onLogin = () => {\n const params = new URLSearchParams(window.location.search);\n params.set('redeemPts', 'true');\n params.set('pointsLogin', 'true');\n router\n .replace(\n {\n pathname: router.pathname,\n query: params.toString(),\n },\n undefined,\n { shallow: true }\n )\n .catch((error) => logError('DISPLAY_POINTS', error, 'Error redirecting to login page'));\n };\n\n const handleSignInButtonClick = () => {\n setShowLoginModal(true);\n sendReward(GOALS.pointsLoginClick);\n };\n\n const buttonLabel = t('SRSignInToBookWithPoints');\n if (!isMVT || !isLoaded) return null;\n return isAuthenticated ? (\n <PointsMessage />\n ) : (\n <>\n <div className=\"text-tier-diamond text-nowrap text-sm\">\n <Trans\n ns=\"use-points\"\n i18nKey=\"signInToBookWithPoints\"\n components={{\n SignInLink: (\n <button\n onClick={handleSignInButtonClick}\n type=\"button\"\n className=\"font-normal underline\"\n aria-label={buttonLabel}\n aria-live=\"polite\"\n >\n Sign in now\n </button>\n ),\n }}\n />\n </div>\n <LoginModal\n showLoginModal={showLoginModal}\n onClose={() => setShowLoginModal(false)}\n onLogin={onLogin}\n title={t('signInNowToPay')}\n />\n </>\n );\n};\n","import cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport { useGetUsePoints, useMetrics, useWrappedRouter } from '../../hooks';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { InfoPopup } from '@dx-ui/osc-info-popup';\nimport { useIsClient } from 'usehooks-ts';\nimport { DisplayPoints } from './display-points-mvt/display-points';\nimport { useState } from 'react';\nimport { useCurrencyConversion } from '@dx-ui/osc-currency-converter';\n\nexport type UsePointsProps = {\n isInvalidOrUnavailableOffer?: boolean;\n onChange?: () => void;\n};\n\nexport const UsePoints = ({ isInvalidOrUnavailableOffer, onChange }: UsePointsProps) => {\n const { router } = useWrappedRouter();\n const { t } = useTranslation('use-points');\n const { shouldUsePoints, selectedCurrency } = useAppState();\n const dispatch = useAppDispatch();\n const metrics = useMetrics();\n const isClient = useIsClient();\n const [a11yText, setA11yText] = useState('');\n const { currenciesMap } = useCurrencyConversion();\n const selecteCurrencyDesc = currenciesMap?.get(selectedCurrency || 'USD')?.description;\n\n const {\n isDisabled: isPointsDisabled,\n isChecked: shouldUsePointsChecked,\n infoPopupMessage,\n } = useGetUsePoints(isInvalidOrUnavailableOffer);\n\n const handleUsePointsChange = () => {\n const a11yMessage = !shouldUsePointsChecked\n ? t('priceChangeToPoints')\n : t('rateChangedToCurrency', { currencyName: selecteCurrencyDesc });\n setA11yText(a11yMessage);\n dispatch({ type: 'SET_USE_POINTS', payload: !shouldUsePoints });\n void metrics.trackUsePointsChecked();\n if (onChange) onChange();\n setTimeout(() => setA11yText(''), 1000);\n };\n\n return isClient && router.isReady ? (\n <div className=\"ml-2 mr-0 flex-col pt-5 md:mx-2 md:px-2 rtl:mb-2\">\n <div className=\"flex\">\n <label className=\"label label-inline-reverse rtl:label-inline-reverse text-nowrap\">\n <span\n className={cx('text-sm font-semibold lg:text-lg rtl:pl-2 rtl:pr-1', {\n 'text-text-disabled': isPointsDisabled,\n })}\n >\n {t('usePoints')}\n </span>\n <input\n checked={shouldUsePointsChecked}\n className=\"form-checkbox\"\n data-testid=\"searchByUsePoints\"\n disabled={isPointsDisabled}\n onChange={handleUsePointsChange}\n type=\"checkbox\"\n />\n {a11yText ? <span className=\"sr-only\">{a11yText}</span> : null}\n </label>\n {infoPopupMessage && (\n <span className=\"m-1 flex\">\n <InfoPopup testId=\"dayUseRateDisclaimer\" label={t('pointsInfo')}>\n <span className=\"flex w-40\">{t(infoPopupMessage)}</span>\n </InfoPopup>\n </span>\n )}\n </div>\n <DisplayPoints />\n </div>\n ) : null;\n};\n","import type { HotelType } from '../../../providers/app-provider/app-provider.types';\nimport type { GeocodeAddress } from '@dx-ui/queries-dx-shop-search-ui';\n\nexport const filterStateCountryBrandHashedHotels = (\n address: Pick<GeocodeAddress, 'state' | '_id' | 'city' | 'country'> | null | undefined,\n brandCode: string | undefined,\n hashedHotelSummaryOptionsHotelData: Record<string, HotelType>\n) =>\n Object.keys(hashedHotelSummaryOptionsHotelData || {})\n .filter((ctyhocn) => {\n const currentHotel = hashedHotelSummaryOptionsHotelData[ctyhocn];\n if (brandCode && currentHotel && brandCode !== currentHotel.brandCode) return false;\n if (address) {\n if (\n address?.country &&\n address?.country !== hashedHotelSummaryOptionsHotelData[ctyhocn]?.address?.country\n )\n return false;\n if (\n address?.state &&\n address?.state !== hashedHotelSummaryOptionsHotelData[ctyhocn]?.address?.state\n )\n return false;\n }\n\n return true;\n })\n .reduce((obj, key) => {\n const hotel = hashedHotelSummaryOptionsHotelData[key];\n if (hotel) obj[key] = hotel;\n return obj;\n }, {} as Record<string, HotelType>);\n\nexport const filterRegionHashedHotels = (\n countriesInRegion: string[],\n hashedHotelSummaryOptionsHotelData: Record<string, HotelType>\n) =>\n Object.keys(hashedHotelSummaryOptionsHotelData || {})\n .filter((ctyhocn) => {\n const currentHotel = hashedHotelSummaryOptionsHotelData[ctyhocn];\n return countriesInRegion?.includes(currentHotel?.address?.country || '');\n })\n .reduce((obj, key) => {\n const hotel = hashedHotelSummaryOptionsHotelData[key];\n if (hotel) obj[key] = hotel;\n return obj;\n }, {} as Record<string, HotelType>);\n","import { keepPreviousData, type UseQueryOptions } from '@tanstack/react-query';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport type { HotelSummaryOptionsQuery, HotelQuadrant } from '@dx-ui/queries-dx-shop-search-ui';\nimport { HotelSummaryOptionsDocument } from '@dx-ui/queries-dx-shop-search-ui';\n\nexport const generateHotelSummaryOptionsQueryArray = ({\n language,\n enabled,\n quadNodes,\n guestLocationCountry,\n}: {\n language: string;\n enabled: boolean;\n quadNodes?: HotelQuadrant[];\n guestLocationCountry?: string;\n}) =>\n quadNodes?.reduce((arr, node) => {\n arr.push({\n queryKey: [\n HotelSummaryOptionsDocument,\n {\n language,\n input: {\n quadrantId: node?.id,\n guestLocationCountry,\n },\n },\n ],\n enabled: isBrowser && enabled,\n placeholderData: keepPreviousData,\n retry: 2,\n });\n return arr;\n }, [] as UseQueryOptions<HotelSummaryOptionsQuery>[]) || [];\n","import type { Maybe, HotelQuadrantBounds, HotelQuadrant } from '@dx-ui/queries-dx-shop-search-ui';\n\ntype NodeFilterCountry = {\n countryCode: string;\n stateCode?: string | null;\n};\n\ntype NodeFilter = {\n brandCode?: string | null;\n countries?: NodeFilterCountry[] | null;\n};\n\nexport type GoogleCoordinate = {\n lat: number;\n lng: number;\n};\n\n/**\n * Determines if two rectangular bounds intercept. Basically this method confirms that there is no overlap between rectangles and then returns the result logically NOT'ed.\n *\n * @param bounds1\n * @param bounds2\n */\nfunction isOverlappingBounds(\n bounds1?: Maybe<HotelQuadrantBounds>,\n bounds2?: Maybe<HotelQuadrantBounds>\n) {\n return (\n typeof bounds1?.northeast?.latitude !== 'undefined' &&\n typeof bounds2?.southwest?.latitude !== 'undefined' &&\n typeof bounds1?.southwest?.latitude !== 'undefined' &&\n typeof bounds2?.northeast?.latitude !== 'undefined' &&\n !(\n bounds1?.northeast?.latitude < bounds2?.southwest?.latitude ||\n bounds1?.southwest?.latitude > bounds2?.northeast?.latitude ||\n bounds1?.southwest?.longitude > bounds2?.northeast?.longitude ||\n bounds1?.northeast?.longitude < bounds2?.southwest?.longitude\n )\n );\n}\n\n/**\n * Determines if the quad node matches the filter criteria.\n *\n * @param {HotelQuadrant} validNode\n * @param {NodeFilter} filter\n */\nfunction isMatchFilter(validNode: HotelQuadrant, filter?: NodeFilter) {\n let brandCodeMatch = true;\n let stateOrCountryMatch = true;\n if (filter) {\n // Filter by brand codes if provided\n if (filter?.brandCode) {\n brandCodeMatch = Boolean(validNode?.brands.find((brand) => brand.code === filter?.brandCode));\n }\n // Filter by country/state if provided\n if (brandCodeMatch && filter.countries && validNode.countries) {\n stateOrCountryMatch = filter.countries.some((c) => {\n const nodeCountry = validNode?.countries?.find(\n (nodeCountry) => nodeCountry.code === c.countryCode\n );\n return !!(nodeCountry && (!c.stateCode || nodeCountry?.states?.includes(c.stateCode)));\n });\n }\n }\n return brandCodeMatch && stateOrCountryMatch;\n}\n\n/**\n * Determines the list of quad tree nodes within the bounds provided. Able to also further filter nodes by a list of brands, states, or countries.\n *\n * @param {HotelQuadrant[]} validNodes\n * @param {Maybe<HotelQuadrantBounds>} bounds\n * @param {NodeFilter} filter\n */\nconst getBoundNodes = (\n validNodes: HotelQuadrant[],\n bounds: Maybe<HotelQuadrantBounds>,\n filter?: NodeFilter\n): HotelQuadrant[] => {\n //if we dont have any nodes or a value for bounds is missing return an empty arr\n if (validNodes.length === 0 || !bounds?.northeast || !bounds.southwest) return [];\n\n // If the bounding box crosses the international time line, create a bounding box for each side of the time line,\n // and get the quad nodes for each.\n const { southwest, northeast } = bounds || {};\n\n if (southwest?.longitude && northeast?.longitude && southwest?.longitude > northeast?.longitude) {\n return [\n ...getBoundNodes(\n validNodes,\n { southwest, northeast: { ...northeast, longitude: 180 } },\n filter\n ),\n ...getBoundNodes(\n validNodes,\n { southwest: { ...southwest, longitude: -180 }, northeast },\n filter\n ),\n ];\n }\n\n // Filter quad nodes based on whether it overlaps with the provided bounding box and matches the filter criteria.\n return validNodes\n .filter((validNode) => isOverlappingBounds(validNode?.bounds, bounds))\n .filter((validNode) => isMatchFilter(validNode, filter));\n};\n\nexport default getBoundNodes;\n","import { useIsClient } from 'usehooks-ts';\nimport { useHotelQuadrantsQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { generateHotelSummaryOptionsQueryArray } from './utils/generate-hotel-summary-options-query-array';\nimport { useQueries } from '@tanstack/react-query';\nimport getBoundNodes from '../../utils/get-bounds-nodes/get-bounds-nodes';\nimport { toNestedBounds } from '../../providers/app-provider/app-provider.utils';\nimport { useLocation } from '@dx-ui/framework-location-provider';\n\nexport const useQuadNodes = ({\n language,\n enabled,\n bounds,\n brandCode,\n stateOrCountryOrRegionFilter,\n}: {\n language: string;\n enabled: boolean;\n bounds: google.maps.LatLngBoundsLiteral;\n brandCode?: string;\n stateOrCountryOrRegionFilter:\n | {\n countries:\n | {\n countryCode: string;\n stateCode: string;\n }[]\n | null;\n }\n | undefined;\n}) => {\n const isClient = useIsClient();\n\n const { country: guestLocationCountry, isLoading: isGuestLocationLoading } = useLocation();\n\n const { data: quadNodesData, isLoading: isQuadNodesDataLoading } = useHotelQuadrantsQuery(\n {},\n {\n enabled: isClient && enabled,\n }\n );\n const quadNodes = getBoundNodes(quadNodesData?.hotelQuadrants || [], toNestedBounds(bounds), {\n ...stateOrCountryOrRegionFilter,\n brandCode,\n });\n\n const isHotelSummaryQueryEnabled =\n Boolean(quadNodesData) && enabled && !isQuadNodesDataLoading && !isGuestLocationLoading;\n\n const queryArr = generateHotelSummaryOptionsQueryArray({\n language,\n enabled: isHotelSummaryQueryEnabled,\n quadNodes,\n guestLocationCountry,\n });\n //parallel fetch zoned hotel summary options\n const results = useQueries({ queries: queryArr });\n\n return {\n isFetching: results.some((result) => result.isFetching),\n isInitialRender: results.some(\n (result) => result.status === 'success' || result.status === 'error'\n ),\n };\n};\n","import { useQuery } from '@tanstack/react-query';\nimport type { THsoHotel } from './utils/get-hashed-hotel-summary-options-data-from-cache';\nimport { logError } from '@dx-ui/framework-logger';\n\nconst fetchHotelSummaryOptions = async ({\n queryKey,\n}: {\n queryKey: [string];\n}): Promise<THsoHotel> => {\n const [url] = queryKey;\n\n const response = await fetch(url);\n\n if (!response.ok) {\n logError(\n 'Shop HSO blob fetch',\n `${response.status}: ${response.statusText}`,\n 'failed to fetch blob'\n );\n throw new Error(`Error ${response.status}: ${response.statusText}`);\n }\n\n return response.json();\n};\n\nexport const useBlob = ({\n enabled,\n hotelSummaryExtractUrl,\n}: {\n enabled: boolean;\n hotelSummaryExtractUrl: string;\n}) => {\n const { isFetching, status, data } = useQuery({\n queryKey: [hotelSummaryExtractUrl],\n queryFn: fetchHotelSummaryOptions,\n enabled,\n });\n\n return {\n data,\n isFetching,\n isInitialRender: status === 'success' || status === 'error',\n status,\n };\n};\n","import { useQueryClient } from '@tanstack/react-query';\nimport type { GeocodeAddress, GeocodePlaceType } from '@dx-ui/queries-dx-shop-search-ui';\nimport { getHashedHotelSummaryOptionsDataFromCache } from './utils/get-hashed-hotel-summary-options-data-from-cache';\n\nimport {\n filterStateCountryBrandHashedHotels,\n filterRegionHashedHotels,\n} from './utils/filter-state-country-brand-hashed-hotels';\nimport * as React from 'react';\nimport { useGetRegions } from '../use-get-regions';\nimport { useQuadNodes } from './use-quad-nodes';\nimport { useBlob } from './use-blob';\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\n\nconst useHotelSummaryOptions = ({\n initialHashedHotelSummaryOptionsData,\n bounds,\n brandCode,\n language,\n address,\n type,\n isInitialRender,\n matchName,\n blobEnabled = false,\n hotelSummaryExtractUrl,\n}: {\n initialHashedHotelSummaryOptionsData: Record<string, HotelType>;\n bounds: google.maps.LatLngBoundsLiteral;\n brandCode?: string;\n language: string;\n address: Pick<GeocodeAddress, '_id' | 'city' | 'country' | 'state'> | null | undefined;\n type: GeocodePlaceType | undefined;\n isInitialRender: React.MutableRefObject<boolean>;\n matchName?: string;\n blobEnabled?: boolean;\n hotelSummaryExtractUrl?: string;\n}) => {\n const isRegions = type === 'region';\n const { countryCodes: countriesInRegion } = useGetRegions({\n isTypeRegion: isRegions,\n regionName: matchName || '',\n isEnabled: isRegions,\n });\n const queryClient = useQueryClient();\n\n const stateOrCountryFilter =\n address && !isRegions\n ? {\n countries: ['country', 'state'].includes(type || '')\n ? [{ countryCode: address?.country || '', stateCode: address?.state || '' }]\n : null,\n }\n : undefined;\n\n let stateOrCountryOrRegionFilter = stateOrCountryFilter;\n if (isRegions) {\n stateOrCountryOrRegionFilter = {\n countries:\n countriesInRegion?.map((country) => ({\n countryCode: country,\n stateCode: '',\n })) || null,\n };\n }\n const isBlobEnabledWithExtractURL = !!hotelSummaryExtractUrl && blobEnabled;\n const {\n data: blobData,\n isFetching: isFetchingBlobNodes,\n isInitialRender: isInitialRenderBlobNodes,\n status: blobStatus,\n } = useBlob({\n enabled: isBlobEnabledWithExtractURL,\n hotelSummaryExtractUrl: hotelSummaryExtractUrl ?? '',\n });\n\n const isFallbackToNodes = !isBlobEnabledWithExtractURL || blobStatus === 'error';\n const { isFetching: isFetchingQuadNodes, isInitialRender: isInitialRenderQuadNodes } =\n useQuadNodes({\n language,\n enabled: isFallbackToNodes,\n bounds,\n brandCode,\n stateOrCountryOrRegionFilter,\n });\n\n const { isFetching, isInitial } = !isFallbackToNodes\n ? { isFetching: isFetchingBlobNodes, isInitial: isInitialRenderBlobNodes }\n : { isFetching: isFetchingQuadNodes, isInitial: isInitialRenderQuadNodes };\n\n if (isInitial) isInitialRender.current = false;\n\n const hotelDataToUse =\n !isFallbackToNodes && blobData\n ? blobData\n : getHashedHotelSummaryOptionsDataFromCache(\n queryClient,\n initialHashedHotelSummaryOptionsData\n );\n\n const filteredHotelDataToUse = React.useMemo(() => {\n if (isFetching) return {};\n return isRegions && countriesInRegion\n ? filterRegionHashedHotels(countriesInRegion, hotelDataToUse)\n : filterStateCountryBrandHashedHotels(address, brandCode, hotelDataToUse);\n }, [address, brandCode, countriesInRegion, hotelDataToUse, isFetching, isRegions]);\n\n return {\n hashedHotelSummaryOptionsHotelData: filteredHotelDataToUse,\n isFetching,\n };\n};\n\nexport default useHotelSummaryOptions;\n","import { useTranslation } from 'react-i18next';\nimport { VERTICAL_SPACE_SAVINGS } from '../constants';\nimport { useGetMVTSelections } from './use-get-mvt-selections';\n\nexport const useVerticalSpaceMVT = () => {\n const { t } = useTranslation('filters');\n const {\n isLoaded: isVerticalSpaceMVTLoaded,\n isMVTVariant: {\n b: isVerticalSpaceVar1,\n c: isVerticalSpaceVar2,\n d: isVerticalSpaceVar3,\n e: isVerticalSpaceVar4,\n f: isVerticalSpaceVar5,\n g: isVerticalSpaceVar6,\n h: isVerticalSpaceVar7,\n i: isVerticalSpaceVar8,\n },\n } = useGetMVTSelections({\n agentId: VERTICAL_SPACE_SAVINGS.agentId,\n MVTVariants: ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n });\n const filterAndSortLabel = t('filterAndSort');\n const isFilterAndSortInAccordion =\n isVerticalSpaceVar1 || isVerticalSpaceVar5 || isVerticalSpaceVar6;\n const isSuggestedFiltersInHorizontalScroll =\n isVerticalSpaceVar4 || isVerticalSpaceVar6 || isVerticalSpaceVar8;\n const isShorterSuggestedFilters =\n isVerticalSpaceVar3 || isVerticalSpaceVar5 || isVerticalSpaceVar7;\n const isCurrencyAndSortInAllFiltersModal =\n isVerticalSpaceVar2 || isVerticalSpaceVar7 || isVerticalSpaceVar8;\n\n return isVerticalSpaceMVTLoaded\n ? {\n filterAndSortLabel,\n isFilterAndSortInAccordion,\n isShorterSuggestedFilters,\n isCurrencyAndSortInAllFiltersModal,\n isSuggestedFiltersInHorizontalScroll,\n isVerticalSpaceVar8,\n }\n : {};\n};\n","import type * as React from 'react';\nimport { ControlNext, ControlBack } from '@dx-ui/osc-controls';\nimport { useTranslation } from 'next-i18next';\n\nexport type Pagination = {\n /**\n * `id` of the element pagination controls for usage with aria-controls\n */\n controls?: string;\n /**\n * Current active page (zero based)\n */\n current?: number;\n /**\n * The text displayed in front of the page numbers and used for a11y\n */\n label?: string;\n /**\n * Whether to visually hide the label\n */\n hideLabel?: boolean;\n /**\n * Controls whether or not to disable buttons at either end\n */\n loop?: boolean;\n /**\n * Total number of pages\n */\n total?: number;\n /**\n * When the page is selected from the dropdown\n */\n onChange?: (val: number) => void;\n onPreviousClick?: React.DOMAttributes<HTMLButtonElement>['onClick'];\n onNextClick?: React.DOMAttributes<HTMLButtonElement>['onClick'];\n /** Pagination item id */\n groupId?: string;\n};\n\n/**\n * Use when you need a control to cycle through \"pages\" or any paginated data.\n *\n * Pass the `current` page _(zero-based)_ and `total` pages, if you want to allow the select element to jump to a specific page, include the `onChange` callback. You can include listeners for `onPreviousClick` and `onNextClick` to change pages one by one.\n */\nexport const Pagination: React.FC<React.PropsWithChildren<Pagination>> = ({\n controls,\n loop,\n onChange,\n onPreviousClick,\n onNextClick,\n hideLabel,\n current = 0,\n total = 0,\n label,\n groupId,\n}) => {\n const { t } = useTranslation('osc-pagination');\n // eslint-disable-next-line prefer-spread\n const pageNumbers = Array.apply(null, Array(total));\n const prevDisabled = loop ? false : current === 0;\n const nextDisabled = loop ? false : current === total - 1;\n\n const paginationLabel = label ?? t('defaultLabel');\n\n return (\n <div className=\"pointer-events-auto flex items-center justify-center space-x-4\">\n <div className=\"sr-only\" aria-live=\"polite\">{`${paginationLabel} ${t('count', {\n current: current + 1,\n total,\n })}`}</div>\n <ControlBack\n id={groupId ? `pagination-left-${groupId}` : 'pagination-left'}\n size=\"lg\"\n aria-controls={controls}\n onClick={onPreviousClick}\n disabled={prevDisabled}\n label={`${t('previousLabel', { label: paginationLabel })}, ${t('count', {\n current: current - 1 < 0 ? total : current,\n total,\n })}`}\n />\n <div className=\"flex items-center justify-center\">\n {onChange ? (\n <>\n {!hideLabel && <span className=\"pr-2\">{paginationLabel}</span>}\n <label>\n <span className=\"sr-only\">{t('prompt', { label: paginationLabel })}</span>\n <select\n aria-controls={controls}\n className=\"form-select\"\n value={current}\n onBlur={(e) => onChange(parseInt(e.currentTarget.value, 10))}\n onChange={(e) => onChange(parseInt(e.currentTarget.value, 10))}\n >\n {pageNumbers.map((_, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <option key={index} value={index}>\n {index + 1}\n </option>\n ))}\n </select>\n </label>\n <span className=\"pl-2\">{t('count', { current: undefined, total })}</span>\n </>\n ) : (\n <span className=\"text-center\">\n {!hideLabel && `${paginationLabel} `}\n <span className=\"tabular-nums\">{t('count', { current: current + 1, total })}</span>\n </span>\n )}\n </div>\n <ControlNext\n id={groupId ? `pagination-right-${groupId}` : 'pagination-right'}\n size=\"lg\"\n aria-controls={controls}\n onClick={onNextClick}\n disabled={nextDisabled}\n label={`${t('nextLabel', { label: paginationLabel })}, ${t('count', {\n current: current + 1 >= total ? 1 : current + 2,\n total,\n })}`}\n />\n </div>\n );\n};\n\nexport default Pagination;\n","export * from './lib/pagination';\n","type GetAspectRatioUrlParams = {\n /** Aspect ratio based URL from CMS */\n src?: string | null;\n /** Carousel container width */\n width: number;\n};\n\nconst BREAK_POINTS = Object.freeze({\n small: 640,\n medium: 768,\n large: 1024,\n extraLarge: 1280,\n twoExtraLarge: 1440,\n});\n\nexport type BreakPoints = keyof typeof BREAK_POINTS;\n\n/**\n * Returns a set of aspect ratio based URLs (with 2x and 3x options) bucketed by breakpoints\n * @param src Aspect ratio based URL from CMS\n * @param width desired image width\n * @returns imgUrl, twoXimgUrl, threeXImgUrl\n */\nexport const getAspectRatioUrl = ({ src, width }: GetAspectRatioUrlParams) => {\n if (!src) return { imgUrl: null, twoXimgUrl: null, threeXImgUrl: null };\n\n const srcUrl = new URLSearchParams(src);\n\n const cw = srcUrl.has('cw') ? parseInt(srcUrl.get('cw') as string) : null;\n const ch = srcUrl.has('ch') ? parseInt(srcUrl.get('ch') as string) : null;\n\n // If a crop width or height is not present in the URL, return null as we cant do the math to return the appopriate img src. Contact the CMS team in case we see broken assets\n if (!cw || !ch) return { imgUrl: null, twoXimgUrl: null, threeXImgUrl: null };\n\n const aspectRatioVariants = Object.entries(BREAK_POINTS).reduce(\n (accum, [breakPointName, breakPointWidth]) => {\n const imgUrl = `${src}&rw=${breakPointWidth}&rh=${Math.round((breakPointWidth * ch) / cw)}`;\n\n const twoXimgUrl = `${src}&rw=${breakPointWidth * 2}&rh=${\n Math.round((breakPointWidth * ch) / cw) * 2\n }`;\n\n const threeXImgUrl = `${src}&rw=${breakPointWidth * 3}&rh=${\n Math.round((breakPointWidth * ch) / cw) * 3\n }`;\n\n return { ...accum, [breakPointName]: { imgUrl, twoXimgUrl, threeXImgUrl } };\n },\n {} as Record<BreakPoints, { imgUrl: string; twoXimgUrl: string; threeXImgUrl: string }>\n );\n\n switch (true) {\n case width <= BREAK_POINTS.small:\n return aspectRatioVariants.small;\n\n case width > BREAK_POINTS.small && width <= BREAK_POINTS.medium:\n return aspectRatioVariants.medium;\n\n case width > BREAK_POINTS.medium && width <= BREAK_POINTS.large:\n return aspectRatioVariants.large;\n\n case width > BREAK_POINTS.large && width <= BREAK_POINTS.extraLarge:\n return aspectRatioVariants.extraLarge;\n\n default:\n return aspectRatioVariants.twoExtraLarge;\n }\n};\n","export * from './lib/get-aspect-ratio-url';\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"node_debug_info\":\"map_node_debug_info___9ET3\"};"],"names":["useGetCompareHotelsInfo","ctyhocns","centerCoordinate","displayHotelCount","isEnabled","useAppState","hasConnectingRooms","selectedCurrency","shouldUsePoints","pageType","hasSpecialRate","useWrappedRouter","safeQueryParams","router","isDateFlex","queryParameters","datesFlex","useCurrencyConversion","currenciesError","currenciesMap","useTranslation","t","isPointsExplorer","isDateSearch","isDreams","numOfChildren","rooms","map","room","children","reduce","previous","current","hotelsQueryArr","ctyhocn","queryKey","HotelDocument","language","ratios","placeholderData","keepPreviousData","retry","staleTime","enabled","results","useQueries","queries","hotelData","hotel","data","useRenovationChip","renoChipConfig","useShopMultiPropAvail","mpaConstraints","asPath","includes","hashedData","isLoading","hotelInfo","images","hotelAmenities","isRenoHotel","currentHotelPriceInfo","priceInfoCollection","undefined","isIndividualRoomsOnly","isIndividualRoomLimitExceeded","statusCode","hotelRateInfo","getMPAHotelRate","usePoints","priceInfo","locale","getHotelLeadRateInfo","badges","isNewHotel","push","isSaleHotel","getDistanceFromCenterFmt","localization","coordinate","distanceFmt","name","tripAdvisorLocationSummary","parking","amenities","roomTypes","parkingType","getParkingType","getRoomTypes","slice","masterImage","getCompareImage","carousel","ctaHref","ctaLabel","messages","filter","amenity","distance","isFetching","some","result","isMPALoading","CompareSkeleton","numHotels","div","className","Array","from","length","fill","_","i","CompareModal","hotelsToCompare","isOpen","onDismiss","onStopCompare","isDesktop","useMediaQuery","isMobile","isTablet","dispatch","useAppDispatch","showRemoveCTA","modalSize","getModalSize","compareCtyhocnsCount","onRemoveHotel","ctyhocnToRemove","type","payload","newCtyhocnList","MOBILE_COMPARE_LIMIT","TABLET_COMPARE_LIMIT","handleOnDismiss","event","isStopCompare","preventDefault","stopPropagation","Dialog","bottomContent","button","onClick","handleStopComparing","setTimeout","size","title","dialogClassName","stickyHeader","table","tr","td","Image","alt","altText","width","height","src","url","unoptimized","data-testid","th","scope","HotelBadges","span","TripAdvisorRating","showReviewCount","isCompare","numReviews","RateInfoMessages","rateMessages","Icon","ul","li","id","p","icon","Link","target","showNewWindowIcon","text","onCompare","useState","showCompareModal","setShowCompareModal","compareHotelsToggle","closeCompareModal","showCompareBar","data-testId","InfoMessageBanner","bannerClassName","aria-live","compareHotelsSelected","compareLimit","DESKTOP_COMPARE_LIMIT","disabled","handleCompareHotels","sendReward","GOALS","compareHotelsCTAClick","hasFreeParking","hasValetParking","price","valetParkingCharge","chargeAmountFmt","hasSelfParking","selfParkingCharge","types","Set","forEach","suite","add","features","feature","numBeds","count","sort","a","b","localeCompare","image","getNoPhotoAvailable","getAspectRatioUrl","imgUrl","noPhoto","variants","CompareHotelsToggle","onChange","toggleRef","useRef","useGetMVTSelections","agentId","COMPARE_ONBOARDING","MVTVariants","isProvisional","isLoaded","isMVTVariant","c","useLocalStorage","isOnboarded","setIsOnboarded","isCompareToolTipOpen","setIsCompareToolTipOpen","handleToolTipClose","isOnboardingVarB","focus","showCompareOnboardingToolTip","isOnboardingMVTLoaded","FeatureToolTip","absolutePosition","tailPosition","message","containerClass","shouldShowFeatureToolTip","cta","label","isOnboardingVarC","input","handleInputChange","compareHotelsToggleOn","ref","checked","useEffect","handleKeyDown","key","document","addEventListener","removeEventListener","cx","tabIndex","role","ControlClose","CurrencyConverter","metrics","useMetrics","activeFiltersState","useFilterState","handleChange","currency","fromCurrency","toCurrency","converted","value","get","currencyEngagement","convert","priceFilter","trackCurrencyConverterClick","currencyCode","OSCCurrencyConverter","showDefaultOption","hasStackedDisplay","selectProps","findAmenity","wantedAmenityId","find","calculateSuggestedFilterCounts","filtersList","visibleHotels","hotelsInBounds","suggestedFilter","inBoundsHotel","amenityIds","isAtleastOneSuggestedFilter","suggestedFilterCounts","calculateTopSuggestedFilters","maxSuggestedFilters","topSuggestedFilters","Object","keys","topFilter","smallestCountKey","filterA","filterB","aCount","bCount","smallestCount","topSuggestedFilter","HIGHEST_CONVERTING_AMENITIES","CONGFIGURED_SUGGESTED_FILTERS","useSuggestedFilters","configFromRule","matchId","saleFilter","HIGHEST_AMENITIES_SUGGESTED_FILTERS","isHighestConvertingAmenitiesTest","isConducticsLoaded","isHighestConvertingAmenitiesVariant","useFeatureToggleConfig","config","suggestedSaleFilter","useMemo","showSaleFilter","sale","HotelAttributeIds","saleFilterCount","defaultConfig","suggestedFilters","MAX_SUGGESTED_AMENITY_FILTERS_WITH_SALE_FILTER","hasSalesFilter","NUM_AMENITIES_SUGGESTIONS_WANTED","getSuggestedFiltersQuant","SuggestedFilterButtons","isConductricsLoaded","isFindingHotels","onFilterCriteriaChange","suggestedFiltersOrderedList","values","showSuggestedFilters","useVerticalSpaceMVT","isSuggestedFiltersInHorizontalScroll","SuggestedFiltersShimmer","shouldShowTitle","SuggestedFiltersTitle","SuggestedFiltersAmenities","suggestedFilterOrderedList","h2","isShorterSuggestedFilters","TaxonomyList","labelledBy","testId","listItemClassname","amenityListCount","amenitySelected","amenityFilters","attributeFilters","SuggestedFilterButton","isAmenitySelected","aria-hidden","a11yText","setA11yText","selectedAmenity","setSelectedAmenity","resetSuggestedFilter","amenityId","attributeIndex","indexOf","amenityIndex","splice","updatedActiveFiltersState","handleOnClick","suggestedFiltersA11YText","suggestedFilterEngagement","trackSuggestedFilters","aria-label","AmenityIcons","HotelCounter","currentPageIndex","customMessage","customSRMessage","isListVisible","pageStart","MAX_PROPERTIES_PER_LIST_VIEW_PAGE","pageEnd","srMessage","srCounter","setSrCounter","interval","setInterval","clearInterval","aria-atomic","LogInBanner","isClient","useIsClient","useAuth","login","isAuthenticated","showLoginModal","setShowLoginModal","closeLoginModal","lang","options","showCreatePassword","forgetInfoLink","env","forgetInfoUrl","PARTNER_FORGET_INFO_LINK","replace","secureInfoLink","GLOBAL_PRIVACY_URL","signInLink","generateSigninUrl","onSignInAttempt","useCallback","resp","window","location","reload","handleLogin","error","shopHonorsLogin","iconClassName","iconName","Trans","ns","i18nKey","components","SignInLink","openLoginModal","shopLoginClick","LoginIFrame","frameSrc","onLoginAttempt","onClose","getTitleExpandedAbbreviation","substring","lastIndexOf","titleAbbreviationExpanded","h1","Markdown","createElement","props","expandedName","decodeURI","href","React","style","textDecoration","JSON","stringify","abbreviation","sanitizeTitleMarkdown","encodeURI","HotelSearchResultSummaryPanel","customCounterMessage","customCounterSRMessage","hotelCount","onFilterChange","pageHeading1Title","showingHotelDivRef","useConfigRule","taggedConfig","configShowMap","paginationIndex","useSmbToggle","handleSMBSwitch","isSMBContextSwitchingEnabled","smbChecked","smbRate","LocationsPageHeadingLevel1","MapListToggleButton","showMapListToggleButton","SMBProfileSwitcher","onInputChange","isSmbChecked","shouldCenterInfoIcon","variant","shouldDisplayBrandedHotels","brandName","altSlugs","baseUrl","path","canonicalSlug","brandCode","newURL","slug","numBrandedHotels","isDisplayBrandBanner","isPageBrandFilterEnabled","isEndOfResults","brandInfo","useBrandDetails","isGlobal","infoBannerMessage","atLeastOneBrandedHotel","linkWithoutBrandSlug","isBrand","getInfoBannerURLWithBrandRemoved","OHW_BASE_URL","isHotelBrand","hasHotels","isGlobalPage","AgeBasedModal","isAgeBasedModalOpen","setIsAgeBasedModalOpen","pricing","sortType","isAgeBased","hasAgeBased","hasChildAges","ageBasedPricing","childAges","age","Boolean","code","roomInfo","adults","kids","isNumber","RoomsModal","ageRange","min","max","agesRequired","ariaLabel","occupancyLimitMessage","onSubmit","handleRoomInfoSubmit","pathname","split","hasTMTPRatesSelected","employeeRate","ownerVIPRate","offerId","pnd","specPlan","fromId","travelAgentId","requestedRatesOnly","searchUriBuilder","urlParams","content","dates","arrivalDate","parseISO","departureDate","flexibleDates","placeId","query","sortBy","f_amenityIds","getValidFilters","f_brandCodes","brandFilters","f_price","isPriceRangeValid","f_tripAdvisorRatings","getTARatingValue","ratingsFilter","availableHotelsOnly","showAvailableHotels","mapRatesToSearchUriBuilder","spec_plan","join","numRooms","sessionToken","specialRateTokens","displayCurrency","adjoiningRoomStay","maxPoints","relative","useFormProps","defaultValues","child","setFocusOnFirstListViewCard","ulContainerRef","firstHotelCardItem","querySelector","setAttribute","useGetVisibleInBoundHotels","currentPageVisibleHotels","brandedVisibleHotels","getBrandedHotels","hotelPageCards","otherVisibleHotels","getOtherHotels","carouselRef","rect","useRect","noPhotoImageUrl","HILTON_ASSETS_URI","carouselImages","CarouselSingle","WhyPropertySkeleton","crypto","randomUUID","useHotelQuery","facilityOverview","shortDesc","trimmedDesc","blurb","serviceAmenities","h4","top3POI","poi","unitStringVariant","distanceUnit","WhyPropertyAccordion","whyPropertyAccordionRef","WHY_PROPERTY","Accordion","items","WhyProperty","collapsedButtonLabel","expandedButtonLabel","onValueChange","handleAccordionClick","whyBrandClicked","whyBrandTotalClicks","CompareHotelsCheckbox","isFirstCheckbox","isSubDesktop","compareCheckboxRef","isCompareCBChecked","selectedCtyhocn","isCompareCBDisabled","showCompareCheckBox","handleCompareHotelChange","selectedHotels","compareHotelsCheckboxSelected","KEY_AMENITIES","freeParking","freeBreakfast","indoorPool","outdoorPool","KeyHotelAmenities","keyAmenities","e","preventFocus","blur","HotelNameHeader","preventNavigation","onFocus","h3","HotelCard","srLocation","disclaimerMessages","isTALoadingState","onDetailsClick","showImages","isListViewOnly","isFirstAvailableProperty","smMedViewPort","useGetHotelInfo","additionalParams","isHotelCard","ctaMessage","customParams","hotelUrl","isHotelDataLoading","rateInfo","transactionPropertyData","hotelName","classname","propertyNameClassName","hotelCardContentClassName","wrapperHotelCardHeaderAndCardContentClassName","hotelCardImage","distanceClassName","hidden","amexDisclaimer","disclaimer","heading","useRecentlyViewed","recentlyViewed","setRecentlyViewed","showRecentlyViewedChip","setHighlightedMapCtyhocn","getHotelLocationName","address","city","state","country","stateName","countryName","onBlur","onMouseEnter","onMouseLeave","Carousel","isLoadingState","rateNameClassName","RateNameCTA","customRateInfo","onRateNameCTAClick","handleOnRateNameCTAClick","setPriceClicked","showCompare","HotelCardCTASkeleton","HotelCards","forwardRef","forwardedRef","hotels","cardsClassName","initHotelCount","rest","enablePOIAndAirportTest","setEnablePOIAndAirporTest","useGetPOIAirportInfoMVT","enableTest","handleDetailsClick","index","setBrandDetail","view","skeletonCardCount","DEFAULT_HOTEL_CARD_SKELETON_COUNT","cnt","HotelCardSkeleton","keyString","firstAvailableProperty","findIndex","summary","status","display","open","leadRate","lowest","SoldOutInfoMessageBanner","hotelPlaceId","toUpperCase","queryParam","_id","displayName","ListViewLoadingShimmer","cardCount","ListView","isHSODataLoading","onPageChanged","sortedHotels","showHotelImages","listRef","showListViewHotelImagesToggle","totalPages","Math","ceil","showAmountAfterTax","cmaTotalPriceIndicator","useTrackSearchPricing","lengthOfStay","getLengthOfStay","handlePagination","newPageIndex","trackPaginationClick","paginationNumber","actionType","setPaginationData","propertyResultList","propertyResults","brandedHotels","lastPageIndex","showHotelCardImage","noHotelsFoundBannerMessage","ListViewBrandBanner","atLeastOneHotelNotBranded","displayAtEndOfBrandPageResults","Pagination","onNextClick","onPreviousClick","total","isSlimView","useMapListToggle","listMapViewButtonLabel","listMapViewButtonIconName","mapToggleButtonArrowDirection","ZoomInForPricing","MapContext","createContext","apiKey","clusterer","infoWindow","infoWindowContainer","setClusterer","setInfoWindow","setInfoWindowContainer","setMap","useMap","context","useContext","MapInfoWindow","onCloseClick","position","setPosition","addListener","google","maps","clearListeners","createPortal","MAP_MARKER_COLOR","POINTS_EXPLORER","active","inactive","DEFAULT","MapMarker","isActive","MapStaticMarker","shouldShowCenterMarker","centerMarker","Marker","MARKER_Z_INDEX","getPriceMarker","color","defaultColor","estimatedAverageCharacterWidth","getPriceMarkerPath","tailHeight","tailWidth","radius","scale","fillColor","fillOpacity","strokeColor","strokeWeight","labelOrigin","Point","MapMarkers","clusterOptions","activeMarker","iconClusterPath","Map","staticMarker","setStaticMarker","markersToDisplay","propsWithoutChildren","getMarker","markers","addMarker","m","marker","scaledSize","Size","fontWeight","fontFamily","optimized","visible","zIndex","clickable","markerOptions","originalZindex","getZIndex","setZIndex","onMouseOver","onMouseOut","set","removeMarker","delete","mapMarker","shouldFocus","close","shouldHaveCluster","MarkerClusterer","averageCenter","minimumClusterSize","maxZoom","ignoreHidden","styles","textSize","textColor","anchorText","setIcon","getLabel","setLabel","markersToAdd","addMarkers","toRemove","_marker","removeMarkers","InfoWindow","containerClassName","directionsLink","hotelBadges","linkCopy","isNewWindow","SearchMapMarkers","MAX_PRICE_PROPERTY_LIMIT","hasSpecialRatesDeepLinked","isSpecialRatesDeeplinked","activeProperty","handleMapMarkerClicked","showPointsInMarker","propertySearch","prefixPublicAssetUriWithAppPrefix","isMPADataLoading","hashedMPAData","currentHotel","ratePlan","attributes","lat","latitude","lng","longitude","hasConfidentialRate","confidentialRates","isNotBookable","displayPriceInMarker","getCMAPrice","rateAmount","rateAmountFmt","totalRate","amountAfterTax","totalRateFmt","amountAfterTaxFmt","markerPrice","isLocalCurrencySameAsHotelCurrency","formatAndConvertPrice","basePrice","currencyQueryError","markerPointsOrPrice","hhonors","dailyRmPointsRateFmt","pointsRangeLabel","dailyRmPointsRateRoundFmt","markerLabel","displayPointsInMarker","suppressBrandLogo","isAffiliateHotel","addressLine1","MapBase","initialBounds","onBoundsChange","onPan","onZoom","showInitialBounds","showQuadNodeBounds","mapRef","infoWindowRef","hasDrawnInitialBoundingBox","hasDrawnInitialQuadNodes","useRouter","resetMap","isMapInitialized","useHotelQuadrantsQuery","isBrowser","listeners","initMap","clickableIcons","disableDefaultUI","zoomControl","zoomControlOptions","getLanguageDirection","ControlPosition","LEFT_TOP","RIGHT_TOP","restriction","latLngBounds","north","south","west","east","strictBounds","MAX_ZOOM","bounds","getBounds","toJSON","handleTilesLoaded","newInfoWindow","disableAutoPan","script","MAPS_URL","defer","async","onload","body","appendChild","listener","remove","setZoom","fitBounds","events","on","Rectangle","quadNodesData","hotelQuadrants","node","southwest","northeast","MapProvider","Provider","handleBoundsChange","hasUserPanned","hasUserZoomed","MAP_API_KEY","showBbox","isDebugQuadTrees","LocationsMapMarkers","disableMarkerPrice","hotelCtyhocn","points","lead","dailyRmPointsRateNumFmt","getMapMarkerIcon","getMarkerPrice","hotelBrandCode","MapBlock","showSpinner","visibleFilteredInBoundHotels","filterChange","h1SearchResultsContent","hotelCounterRef","counterMessage","isDesktopMapView","isSearchPage","shouldShowMap","useConductricsSelection","Spinner","Dropdown","innerWidth","getBreakpoint","htmlFor","select","evt","margin","option","isVisible","testIdLabel","isDisabled","SortByDropDown","filteredHotelCount","isInvalidOrUnavailableOffer","sortByOptions","useGetSortByOptions","filteredHotelsCount","handleUsePointsOnSortChange","isSortByPoints","isSortByPrice","sortOptions","sortEngagement","propertySearchSort","PointsMessage","guestInfo","pointsAvailable","numPoints","LoginModal","onLogin","persistSessionState","DisplayPoints","DISPLAY_NUM_OF_AVAILABLE_POINTS","buttonLabel","handleSignInButtonClick","pointsLoginClick","params","URLSearchParams","search","toString","shallow","catch","logError","UsePoints","selecteCurrencyDesc","description","useGetUsePoints","isChecked","infoPopupMessage","isReady","isPointsDisabled","shouldUsePointsChecked","handleUsePointsChange","a11yMessage","currencyName","trackUsePointsChecked","InfoPopup","generateHotelSummaryOptionsQueryArray","quadNodes","guestLocationCountry","arr","HotelSummaryOptionsDocument","quadrantId","getBoundNodes","validNodes","validNode","bounds1","bounds2","isMatchFilter","stateOrCountryMatch","brandCodeMatch","brands","brand","countries","nodeCountry","countryCode","stateCode","states","useQuadNodes","stateOrCountryOrRegionFilter","useLocation","toNestedBounds","queryArr","isQuadNodesDataLoading","isGuestLocationLoading","isInitialRender","fetchHotelSummaryOptions","response","fetch","ok","statusText","json","useBlob","hotelSummaryExtractUrl","useQuery","queryFn","initialHashedHotelSummaryOptionsData","useHotelSummaryOptions","matchName","blobEnabled","isRegions","countryCodes","useGetRegions","isTypeRegion","regionName","queryClient","useQueryClient","stateOrCountryFilter","countriesInRegion","isBlobEnabledWithExtractURL","isFallbackToNodes","blobStatus","isFetchingQuadNodes","isInitial","isInitialRenderQuadNodes","isFetchingBlobNodes","isInitialRenderBlobNodes","hotelDataToUse","blobData","getHashedHotelSummaryOptionsDataFromCache","hashedHotelSummaryOptionsHotelData","filteredHotelDataToUse","filterRegionHashedHotels","obj","filterStateCountryBrandHashedHotels","VERTICAL_SPACE_SAVINGS","d","f","g","h","filterAndSortLabel","isVerticalSpaceMVTLoaded","isFilterAndSortInAccordion","isVerticalSpaceVar1","isVerticalSpaceVar5","isVerticalSpaceVar6","isVerticalSpaceVar3","isVerticalSpaceVar7","isCurrencyAndSortInAllFiltersModal","isVerticalSpaceVar2","isVerticalSpaceVar8","isVerticalSpaceVar4","controls","loop","hideLabel","groupId","pageNumbers","apply","prevDisabled","nextDisabled","paginationLabel","ControlBack","aria-controls","parseInt","currentTarget","ControlNext","BREAK_POINTS","freeze","small","medium","large","extraLarge","twoExtraLarge","twoXimgUrl","threeXImgUrl","srcUrl","cw","has","ch","aspectRatioVariants","entries","accum","breakPointName","breakPointWidth","round"],"sourceRoot":"","ignoreList":[]}