import { AdvancedMarker, AdvancedMarkerAnchorPoint, InfoWindow, } from "@vis.gl/react-google-maps" import { useCallback } from "react" import { useMediaQuery } from "usehooks-ts" import { useHotelsMapStore } from "@/stores/hotels-map" import StandaloneHotelCardDialog from "@/components/HotelReservation/HotelCardDialog/StandaloneHotelCardDialog" import { trackEvent } from "@/utils/tracking/base" import HotelPin from "./HotelPin" import styles from "./hotelListingMapContent.module.css" import type { HotelListingMapContentProps } from "@/types/components/hotelReservation/selectHotel/map" function HotelListingMapContent({ hotelPins }: HotelListingMapContentProps) { const { activeHotel, hoveredHotel, activate, deactivate, engage, disengage } = useHotelsMapStore() const isDesktop = useMediaQuery("(min-width: 768px)") const toggleActiveHotelPin = useCallback( (pinName: string | null, hotelId: string) => { if (activeHotel === pinName || pinName === null) { deactivate() return } trackEvent({ event: "hotelClickMap", map: { action: "hotel click - map", }, hotelInfo: { hotelId, }, }) activate(pinName) }, [activeHotel, activate, deactivate] ) return (
{hotelPins.map((pin) => { const isActiveOrHovered = activeHotel === pin.name || hoveredHotel === pin.name const hotelPrice = pin.memberPrice ?? pin.publicPrice ?? pin.redemptionPrice ?? pin.voucherPrice ?? pin.chequePrice?.numberOfCheques ?? null const hotelAdditionalPrice = pin.chequePrice ? pin.chequePrice.additionalPricePerStay : undefined const hotelAdditionalCurrency = pin.chequePrice ? pin.chequePrice.currency?.toString() : undefined return ( engage(pin.name)} onMouseLeave={() => disengage()} onClick={() => toggleActiveHotelPin(pin.name, pin.operaId)} > {isActiveOrHovered && isDesktop && ( { deactivate() disengage() }} /> )} ) })}
) } export default HotelListingMapContent