diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/@modal/(.)map/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/@modal/(.)map/page.tsx new file mode 100644 index 000000000..667d43ad6 --- /dev/null +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/@modal/(.)map/page.tsx @@ -0,0 +1,75 @@ +import { notFound } from "next/navigation" + +import { env } from "@/env/server" +import { getLocations } from "@/lib/trpc/memoizedRequests" + +import SelectHotelMap from "@/components/HotelReservation/SelectHotel/SelectHotelMap" +import { getHotelReservationQueryParams } from "@/components/HotelReservation/SelectRate/RoomSelection/utils" +import { MapModal } from "@/components/MapModal" +import { setLang } from "@/i18n/serverContext" + +import { + fetchAvailableHotels, + generateChildrenString, + getCentralCoordinates, + getPointOfInterests, +} from "../../utils" + +import type { SelectHotelSearchParams } from "@/types/components/hotelReservation/selectHotel/selectHotelSearchParams" +import type { LangParams, PageArgs } from "@/types/params" + +export default async function SelectHotelMapPage({ + params, + searchParams, +}: PageArgs) { + if (env.HIDE_FOR_NEXT_RELEASE) { + return notFound() + } + + setLang(params.lang) + const locations = await getLocations() + + if (!locations || "error" in locations) { + return null + } + const city = locations.data.find( + (location) => + location.name.toLowerCase() === searchParams.city.toLowerCase() + ) + if (!city) return notFound() + + const googleMapId = env.GOOGLE_DYNAMIC_MAP_ID + const googleMapsApiKey = env.GOOGLE_STATIC_MAP_KEY + + const selectHotelParams = new URLSearchParams(searchParams) + const selectHotelParamsObject = + getHotelReservationQueryParams(selectHotelParams) + const adults = selectHotelParamsObject.room[0].adults // TODO: Handle multiple rooms + const children = selectHotelParamsObject.room[0].child + ? generateChildrenString(selectHotelParamsObject.room[0].child) + : undefined // TODO: Handle multiple rooms + + const hotels = await fetchAvailableHotels({ + cityId: city.id, + roomStayStartDate: searchParams.fromDate, + roomStayEndDate: searchParams.toDate, + adults, + children, + }) + + const pointOfInterests = getPointOfInterests(hotels) + + const centralCoordinates = getCentralCoordinates(pointOfInterests) + + return ( + + + + ) +} diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/@modal/default.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/@modal/default.tsx new file mode 100644 index 000000000..86b9e9a38 --- /dev/null +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/@modal/default.tsx @@ -0,0 +1,3 @@ +export default function Default() { + return null +} diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/layout.module.css b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/layout.module.css new file mode 100644 index 000000000..b86e58a72 --- /dev/null +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/layout.module.css @@ -0,0 +1,5 @@ +.layout { + min-height: 100dvh; + background-color: var(--Base-Background-Primary-Normal); + position: relative; +} diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/layout.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/layout.tsx new file mode 100644 index 000000000..ab5f62674 --- /dev/null +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/layout.tsx @@ -0,0 +1,24 @@ +import { notFound } from "next/navigation" + +import { env } from "@/env/server" + +import styles from "./layout.module.css" + +import { LangParams, LayoutArgs } from "@/types/params" + +export default function HotelReservationLayout({ + children, + modal, +}: React.PropsWithChildren< + LayoutArgs & { modal: React.ReactNode } +>) { + if (env.HIDE_FOR_NEXT_RELEASE) { + return notFound() + } + return ( +
+ {children} + {modal} +
+ ) +} diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/map/page.module.css b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/map/page.module.css index ec9b9ce4f..d0a692d8b 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/map/page.module.css +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/map/page.module.css @@ -2,5 +2,5 @@ display: grid; background-color: var(--Scandic-Brand-Warm-White); min-height: 100dvh; - grid-template-columns: 420px 1fr; + position: relative; } diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/map/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/map/page.tsx index 8dca8f4c7..bfd164880 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/map/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/map/page.tsx @@ -1,58 +1 @@ -import { env } from "@/env/server" - -import { - fetchAvailableHotels, - getFiltersFromHotels, -} from "@/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/utils" -import SelectHotelMap from "@/components/HotelReservation/SelectHotel/SelectHotelMap" -import { setLang } from "@/i18n/serverContext" - -import styles from "./page.module.css" - -import { - PointOfInterest, - PointOfInterestCategoryNameEnum, - PointOfInterestGroupEnum, -} from "@/types/hotel" -import { LangParams, PageArgs } from "@/types/params" - -export default async function SelectHotelMapPage({ - params, -}: PageArgs) { - const googleMapId = env.GOOGLE_DYNAMIC_MAP_ID - const googleMapsApiKey = env.GOOGLE_STATIC_MAP_KEY - setLang(params.lang) - - const hotels = await fetchAvailableHotels({ - cityId: "8ec4bba3-1c38-4606-82d1-bbe3f6738e54", - roomStayStartDate: "2024-11-02", - roomStayEndDate: "2024-11-03", - adults: 1, - }) - - const filters = getFiltersFromHotels(hotels) - - // TODO: this is just a quick transformation to get something there. May need rework - const pointOfInterests: PointOfInterest[] = hotels.map((hotel) => ({ - coordinates: { - lat: hotel.hotelData.location.latitude, - lng: hotel.hotelData.location.longitude, - }, - name: hotel.hotelData.name, - distance: hotel.hotelData.location.distanceToCentre, - categoryName: PointOfInterestCategoryNameEnum.HOTEL, - group: PointOfInterestGroupEnum.LOCATION, - })) - - return ( -
- -
- ) -} +export { default } from "../@modal/(.)map/page" diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.module.css b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.module.css index acc942e21..800ffe8f9 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.module.css +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.module.css @@ -1,6 +1,6 @@ .main { display: flex; - gap: var(--Spacing-x4); + gap: var(--Spacing-x3); padding: var(--Spacing-x4) var(--Spacing-x4) 0 var(--Spacing-x4); background-color: var(--Scandic-Brand-Warm-White); min-height: 100dvh; @@ -19,8 +19,28 @@ padding: var(--Spacing-x2) var(--Spacing-x0); } +.mapContainer { + display: none; +} + +.buttonContainer { + display: flex; + gap: var(--Spacing-x2); + margin-bottom: var(--Spacing-x3); +} + +.button { + flex: 1; +} + @media (min-width: 768px) { + .mapContainer { + display: block; + } .main { flex-direction: row; } + .buttonContainer { + display: none; + } } diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.tsx index 3ebe54958..f3d920fb7 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/page.tsx @@ -9,6 +9,7 @@ import { } from "@/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/utils" import HotelCardListing from "@/components/HotelReservation/HotelCardListing" import HotelFilter from "@/components/HotelReservation/SelectHotel/HotelFilter" +import MobileMapButtonContainer from "@/components/HotelReservation/SelectHotel/MobileMapButtonContainer" import { generateChildrenString, getHotelReservationQueryParams, @@ -62,25 +63,28 @@ export default async function SelectHotelPage({ return (
- - - - - {intl.formatMessage({ id: "Show map" })} - - +
+ + + + + {intl.formatMessage({ id: "Show map" })} + + +
+
diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/utils.ts b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/utils.ts index 8dfc76a1d..d33c995fe 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/utils.ts +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-hotel/utils.ts @@ -2,9 +2,16 @@ import { serverClient } from "@/lib/trpc/server" import { getLang } from "@/i18n/serverContext" -import { AvailabilityInput } from "@/types/components/hotelReservation/selectHotel/availabilityInput" -import { HotelData } from "@/types/components/hotelReservation/selectHotel/hotelCardListingProps" -import { Filter } from "@/types/components/hotelReservation/selectHotel/hotelFilters" +import { BedTypeEnum } from "@/types/components/bookingWidget/enums" +import type { AvailabilityInput } from "@/types/components/hotelReservation/selectHotel/availabilityInput" +import type { HotelData } from "@/types/components/hotelReservation/selectHotel/hotelCardListingProps" +import type { Filter } from "@/types/components/hotelReservation/selectHotel/hotelFilters" +import type { Child } from "@/types/components/hotelReservation/selectRate/selectRate" +import { + type PointOfInterest, + PointOfInterestCategoryNameEnum, + PointOfInterestGroupEnum, +} from "@/types/hotel" export async function fetchAvailableHotels( input: AvailabilityInput @@ -41,3 +48,49 @@ export function getFiltersFromHotels(hotels: HotelData[]) { return filterList } + +const bedTypeMap: Record = { + [BedTypeEnum.IN_ADULTS_BED]: "ParentsBed", + [BedTypeEnum.IN_CRIB]: "Crib", + [BedTypeEnum.IN_EXTRA_BED]: "ExtraBed", +} + +export function generateChildrenString(children: Child[]): string { + return `[${children + ?.map((child) => { + const age = child.age + const bedType = bedTypeMap[+child.bed] + return `${age}:${bedType}` + }) + .join(",")}]` +} + +export function getPointOfInterests(hotels: HotelData[]): PointOfInterest[] { + // TODO: this is just a quick transformation to get something there. May need rework + return hotels.map((hotel) => ({ + coordinates: { + lat: hotel.hotelData.location.latitude, + lng: hotel.hotelData.location.longitude, + }, + name: hotel.hotelData.name, + distance: hotel.hotelData.location.distanceToCentre, + categoryName: PointOfInterestCategoryNameEnum.HOTEL, + group: PointOfInterestGroupEnum.LOCATION, + })) +} + +export function getCentralCoordinates(pointOfInterests: PointOfInterest[]) { + const centralCoordinates = pointOfInterests.reduce( + (acc, poi) => { + acc.lat += poi.coordinates.lat + acc.lng += poi.coordinates.lng + return acc + }, + { lat: 0, lng: 0 } + ) + + centralCoordinates.lat /= pointOfInterests.length + centralCoordinates.lng /= pointOfInterests.length + + return centralCoordinates +} diff --git a/components/HotelReservation/SelectHotel/HotelFilter/hotelFilter.module.css b/components/HotelReservation/SelectHotel/HotelFilter/hotelFilter.module.css index 737eca4d9..156874b54 100644 --- a/components/HotelReservation/SelectHotel/HotelFilter/hotelFilter.module.css +++ b/components/HotelReservation/SelectHotel/HotelFilter/hotelFilter.module.css @@ -1,5 +1,6 @@ .container { min-width: 272px; + display: none; } .facilities { @@ -24,3 +25,9 @@ height: 1.25rem; margin: 0; } + +@media (min-width: 768px) { + .container { + display: block; + } +} diff --git a/components/HotelReservation/SelectHotel/MobileMapButtonContainer/index.tsx b/components/HotelReservation/SelectHotel/MobileMapButtonContainer/index.tsx new file mode 100644 index 000000000..8fba327b3 --- /dev/null +++ b/components/HotelReservation/SelectHotel/MobileMapButtonContainer/index.tsx @@ -0,0 +1,48 @@ +"use client" + +import { useIntl } from "react-intl" + +import { selectHotelMap } from "@/constants/routes/hotelReservation" + +import { FilterIcon, MapIcon } from "@/components/Icons" +import Button from "@/components/TempDesignSystem/Button" +import Link from "@/components/TempDesignSystem/Link" +import useLang from "@/hooks/useLang" + +import styles from "./mobileMapButtonContainer.module.css" + +export default function MobileMapButtonContainer({ city }: { city: string }) { + const intl = useIntl() + const lang = useLang() + + return ( +
+ + {/* TODO: Add filter toggle */} + +
+ ) +} diff --git a/components/HotelReservation/SelectHotel/MobileMapButtonContainer/mobileMapButtonContainer.module.css b/components/HotelReservation/SelectHotel/MobileMapButtonContainer/mobileMapButtonContainer.module.css new file mode 100644 index 000000000..5d0610d8f --- /dev/null +++ b/components/HotelReservation/SelectHotel/MobileMapButtonContainer/mobileMapButtonContainer.module.css @@ -0,0 +1,15 @@ +.buttonContainer { + display: flex; + gap: var(--Spacing-x2); + margin-bottom: var(--Spacing-x3); +} + +.button { + flex: 1; +} + +@media (min-width: 768px) { + .buttonContainer { + display: none; + } +} diff --git a/components/HotelReservation/SelectHotel/SelectHotelMap/HotelListing/hotelListing.module.css b/components/HotelReservation/SelectHotel/SelectHotelMap/HotelListing/hotelListing.module.css new file mode 100644 index 000000000..9ebb0678e --- /dev/null +++ b/components/HotelReservation/SelectHotel/SelectHotelMap/HotelListing/hotelListing.module.css @@ -0,0 +1,9 @@ +.hotelListing { + display: none; +} + +@media (min-width: 768px) { + .hotelListing { + display: block; + } +} diff --git a/components/HotelReservation/SelectHotel/SelectHotelMap/HotelListing/index.tsx b/components/HotelReservation/SelectHotel/SelectHotelMap/HotelListing/index.tsx index 4bcdb2d68..ecb639250 100644 --- a/components/HotelReservation/SelectHotel/SelectHotelMap/HotelListing/index.tsx +++ b/components/HotelReservation/SelectHotel/SelectHotelMap/HotelListing/index.tsx @@ -1,5 +1,7 @@ "use client" +import styles from "./hotelListing.module.css" + import { HotelListingProps } from "@/types/components/hotelReservation/selectHotel/map" // TODO: This component is copied from @@ -7,5 +9,5 @@ import { HotelListingProps } from "@/types/components/hotelReservation/selectHot // Look at that for inspiration on how to do the interaction with the map. export default function HotelListing({}: HotelListingProps) { - return
Hotel listing TBI
+ return
Hotel listing TBI
} diff --git a/components/HotelReservation/SelectHotel/SelectHotelMap/index.tsx b/components/HotelReservation/SelectHotel/SelectHotelMap/index.tsx index b14538812..0dc82d7ab 100644 --- a/components/HotelReservation/SelectHotel/SelectHotelMap/index.tsx +++ b/components/HotelReservation/SelectHotel/SelectHotelMap/index.tsx @@ -1,14 +1,14 @@ "use client" import { APIProvider } from "@vis.gl/react-google-maps" +import { useRouter, useSearchParams } from "next/navigation" import { useState } from "react" import { useIntl } from "react-intl" import { selectHotel } from "@/constants/routes/hotelReservation" -import { CloseIcon } from "@/components/Icons" +import { CloseIcon, CloseLargeIcon } from "@/components/Icons" import InteractiveMap from "@/components/Maps/InteractiveMap" import Button from "@/components/TempDesignSystem/Button" -import Link from "@/components/TempDesignSystem/Link" import useLang from "@/hooks/useLang" import HotelListing from "./HotelListing" @@ -22,36 +22,60 @@ export default function SelectHotelMap({ coordinates, pointsOfInterest, mapId, + isModal, }: SelectHotelMapProps) { + const searchParams = useSearchParams() + const router = useRouter() const lang = useLang() const intl = useIntl() const [activePoi, setActivePoi] = useState(null) + function handleModalDismiss() { + router.back() + } + + function handlePageRedirect() { + router.push(`${selectHotel[lang]}?${searchParams.toString()}`) + } + const closeButton = ( ) return ( - - +
+
+ + Filter and sort + {/* TODO: Add filter and sort button */} +
+ + +
) } diff --git a/components/HotelReservation/SelectHotel/SelectHotelMap/selectHotelMap.module.css b/components/HotelReservation/SelectHotel/SelectHotelMap/selectHotelMap.module.css index 54f685aa8..c54a77ccf 100644 --- a/components/HotelReservation/SelectHotel/SelectHotelMap/selectHotelMap.module.css +++ b/components/HotelReservation/SelectHotel/SelectHotelMap/selectHotelMap.module.css @@ -2,4 +2,39 @@ pointer-events: initial; box-shadow: var(--button-box-shadow); gap: var(--Spacing-x-half); + display: none !important; +} + +.container { + height: 100%; +} + +.filterContainer { + display: flex; + justify-content: space-between; + align-items: center; + position: relative; + top: 0; + left: 0; + right: 0; + z-index: 10; + background-color: var(--Base-Surface-Secondary-light-Normal); + padding: 0 var(--Spacing-x2); + height: 44px; +} + +.filterContainer .closeButton { + color: var(--UI-Text-High-Contrast); +} + +@media (min-width: 768px) { + .closeButton { + display: flex !important; + } + .filterContainer { + display: none; + } + .container { + display: flex; + } } diff --git a/components/Icons/Filter.tsx b/components/Icons/Filter.tsx new file mode 100644 index 000000000..4b715059d --- /dev/null +++ b/components/Icons/Filter.tsx @@ -0,0 +1,23 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function FilterIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + ) +} diff --git a/components/Icons/index.tsx b/components/Icons/index.tsx index ce23296fe..a8be6f48f 100644 --- a/components/Icons/index.tsx +++ b/components/Icons/index.tsx @@ -45,6 +45,7 @@ export { default as ErrorCircleIcon } from "./ErrorCircle" export { default as EyeHideIcon } from "./EyeHide" export { default as EyeShowIcon } from "./EyeShow" export { default as FanIcon } from "./Fan" +export { default as FilterIcon } from "./Filter" export { default as FitnessIcon } from "./Fitness" export { default as FootstoolIcon } from "./Footstool" export { default as GalleryIcon } from "./Gallery" diff --git a/components/MapModal/index.tsx b/components/MapModal/index.tsx new file mode 100644 index 000000000..282e08151 --- /dev/null +++ b/components/MapModal/index.tsx @@ -0,0 +1,85 @@ +"use client" + +import { useRouter } from "next/navigation" +import { useCallback, useEffect, useRef, useState } from "react" +import { Dialog, Modal } from "react-aria-components" + +import { debounce } from "@/utils/debounce" + +import styles from "./mapModal.module.css" + +export function MapModal({ children }: { children: React.ReactNode }) { + const router = useRouter() + const [mapHeight, setMapHeight] = useState("0px") + const [mapTop, setMapTop] = useState("0px") + const [isOpen, setOpen] = useState(true) + + const [scrollHeightWhenOpened, setScrollHeightWhenOpened] = useState(0) + + const rootDiv = useRef(null) + + const handleOnOpenChange = (open: boolean) => { + setOpen(open) + if (!open) { + router.back() + } + } + + // Calculate the height of the map based on the viewport height from the start-point (below the header and booking widget) + const handleMapHeight = useCallback(() => { + const topPosition = rootDiv.current?.getBoundingClientRect().top ?? 0 + const scrollY = window.scrollY + setMapHeight(`calc(100dvh - ${topPosition + scrollY}px)`) + setMapTop(`${topPosition + scrollY}px`) + }, []) + + // Making sure the map is always opened at the top of the page, + // just below the header and booking widget as these should stay visible. + // When closing, the page should scroll back to the position it was before opening the map. + useEffect(() => { + // Skip the first render + if (!rootDiv.current) { + return + } + + if (scrollHeightWhenOpened === 0) { + const scrollY = window.scrollY + setScrollHeightWhenOpened(scrollY) + window.scrollTo({ top: 0, behavior: "instant" }) + } + }, [scrollHeightWhenOpened, rootDiv]) + + useEffect(() => { + const debouncedResizeHandler = debounce(function () { + handleMapHeight() + }) + + const observer = new ResizeObserver(debouncedResizeHandler) + + observer.observe(document.documentElement) + + return () => { + if (observer) { + observer.unobserve(document.documentElement) + } + } + }, [rootDiv, handleMapHeight]) + + return ( +
+ + + {children} + + +
+ ) +} diff --git a/components/MapModal/mapModal.module.css b/components/MapModal/mapModal.module.css new file mode 100644 index 000000000..500da73f5 --- /dev/null +++ b/components/MapModal/mapModal.module.css @@ -0,0 +1,18 @@ +.dynamicMap { + --hotel-map-height: 100dvh; + --hotel-map-top: 0px; + position: absolute; + top: var(--hotel-map-top); + left: 0; + height: var(--hotel-map-height); + width: 100dvw; + z-index: var(--hotel-dynamic-map-z-index); + display: flex; + flex-direction: column; + background-color: var(--Base-Surface-Primary-light-Normal); +} +.wrapper { + position: absolute; + top: 0; + left: 0; +} diff --git a/components/Maps/InteractiveMap/interactiveMap.module.css b/components/Maps/InteractiveMap/interactiveMap.module.css index 557730bfe..471409188 100644 --- a/components/Maps/InteractiveMap/interactiveMap.module.css +++ b/components/Maps/InteractiveMap/interactiveMap.module.css @@ -1,6 +1,7 @@ .mapContainer { --button-box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.1); width: 100%; + height: 100%; position: relative; z-index: 0; } diff --git a/i18n/dictionaries/da.json b/i18n/dictionaries/da.json index 8bc08cc13..6a253deb6 100644 --- a/i18n/dictionaries/da.json +++ b/i18n/dictionaries/da.json @@ -286,6 +286,7 @@ "See all photos": "Se alle billeder", "See hotel details": "Se hoteloplysninger", "See less FAQ": "Se mindre FAQ", + "See on map": "Se på kort", "See room details": "Se værelsesdetaljer", "See rooms": "Se værelser", "Select a country": "Vælg et land", diff --git a/i18n/dictionaries/de.json b/i18n/dictionaries/de.json index e72d5bffc..a26b4b751 100644 --- a/i18n/dictionaries/de.json +++ b/i18n/dictionaries/de.json @@ -285,6 +285,7 @@ "See all photos": "Alle Fotos ansehen", "See hotel details": "Hotelinformationen ansehen", "See less FAQ": "Weniger anzeigen FAQ", + "See on map": "Karte ansehen", "See room details": "Zimmerdetails ansehen", "See rooms": "Zimmer ansehen", "Select a country": "Wähle ein Land", diff --git a/i18n/dictionaries/en.json b/i18n/dictionaries/en.json index 177c4a803..d1cd64e00 100644 --- a/i18n/dictionaries/en.json +++ b/i18n/dictionaries/en.json @@ -299,6 +299,7 @@ "See all photos": "See all photos", "See hotel details": "See hotel details", "See less FAQ": "See less FAQ", + "See on map": "See on map", "See room details": "See room details", "See rooms": "See rooms", "Select a country": "Select a country", diff --git a/i18n/dictionaries/fi.json b/i18n/dictionaries/fi.json index 28703bc14..8abb46922 100644 --- a/i18n/dictionaries/fi.json +++ b/i18n/dictionaries/fi.json @@ -287,6 +287,7 @@ "See all photos": "Katso kaikki kuvat", "See hotel details": "Katso hotellin tiedot", "See less FAQ": "Katso vähemmän UKK", + "See on map": "Näytä kartalla", "See room details": "Katso huoneen tiedot", "See rooms": "Katso huoneet", "Select a country": "Valitse maa", diff --git a/i18n/dictionaries/no.json b/i18n/dictionaries/no.json index f1f0a38ac..fcbe82391 100644 --- a/i18n/dictionaries/no.json +++ b/i18n/dictionaries/no.json @@ -284,6 +284,7 @@ "See all photos": "Se alle bilder", "See hotel details": "Se hotellinformasjon", "See less FAQ": "Se mindre FAQ", + "See on map": "Se på kart", "See room details": "Se detaljer om rommet", "See rooms": "Se rom", "Select a country": "Velg et land", diff --git a/i18n/dictionaries/sv.json b/i18n/dictionaries/sv.json index 0aeb71644..6d22fdea0 100644 --- a/i18n/dictionaries/sv.json +++ b/i18n/dictionaries/sv.json @@ -284,6 +284,7 @@ "See all photos": "Se alla foton", "See hotel details": "Se hotellinformation", "See less FAQ": "See färre FAQ", + "See on map": "Se på karta", "See room details": "Se rumsdetaljer", "See rooms": "Se rum", "Select a country": "Välj ett land", diff --git a/types/components/hotelReservation/selectHotel/map.ts b/types/components/hotelReservation/selectHotel/map.ts index 9d223d24d..0dfbe98a7 100644 --- a/types/components/hotelReservation/selectHotel/map.ts +++ b/types/components/hotelReservation/selectHotel/map.ts @@ -12,4 +12,5 @@ export interface SelectHotelMapProps { coordinates: Coordinates pointsOfInterest: PointOfInterest[] mapId: string + isModal: boolean }