Merged in feat/sw-3218-move-hotelreservationsidepeek-to-booking-flow (pull request #2600)
feat(SW-2873): Move HotelReservationSidePeek to booking-flow * Move sidepeek store to booking-flow * Begin move of HotelReservationSidePeek to booking-flow * Copy Link * Update AccessibilityAccordionItem * Split AccessibilityAccordionItem into two components * Fix tracking for Accordion * Duplicate ButtonLink to booking-flow TEMP * AdditionalAmeneties * wip * Move sidepeek accordion items * Remove temp ButtonLink * Merge branch 'master' into feat/sw-3218-move-hotelreservationsidepeek-to-booking-flow * Fix accordion tracking * Merge branch 'master' into feat/sw-3218-move-hotelreservationsidepeek-to-booking-flow * Update exports * Fix self-referencing import * Merge branch 'master' into feat/sw-3218-move-hotelreservationsidepeek-to-booking-flow * Add 'use client' to tracking function * Merge branch 'master' into feat/sw-3218-move-hotelreservationsidepeek-to-booking-flow * Fix TEMP folder * Refactor sidepeek tracking * Merge branch 'master' into feat/sw-3218-move-hotelreservationsidepeek-to-booking-flow Approved-by: Joakim Jäderberg
This commit is contained in:
@@ -11,7 +11,10 @@ import { getMessages } from "@/i18n"
|
||||
import ClientIntlProvider from "@/i18n/Provider"
|
||||
import { setLang } from "@/i18n/serverContext"
|
||||
|
||||
import { trackBookingSearchClick } from "../utils/tracking"
|
||||
import {
|
||||
trackAccordionItemOpen,
|
||||
trackBookingSearchClick,
|
||||
} from "../utils/tracking"
|
||||
|
||||
import type { Metadata } from "next"
|
||||
|
||||
@@ -53,6 +56,7 @@ export default async function RootLayout(props: RootLayoutProps) {
|
||||
<BookingFlowTrackingProvider
|
||||
trackingFunctions={{
|
||||
trackBookingSearchClick,
|
||||
trackAccordionItemOpen,
|
||||
}}
|
||||
>
|
||||
<header
|
||||
|
||||
@@ -4,8 +4,12 @@ export function trackBookingSearchClick(
|
||||
searchTerm: string,
|
||||
searchType: "hotel" | "destination"
|
||||
) {
|
||||
console.log("TODO: Implement trackBookingSearchClick", {
|
||||
console.warn("TODO: Implement trackBookingSearchClick", {
|
||||
searchTerm,
|
||||
searchType,
|
||||
})
|
||||
}
|
||||
|
||||
export function trackAccordionItemOpen(option: string) {
|
||||
console.warn("TODO: Implement trackAccordionItemOpen", { option })
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import SidePeek from "@/components/HotelReservation/SidePeek"
|
||||
import SidePeek from "@scandic-hotels/booking-flow/components/HotelReservationSidePeek"
|
||||
|
||||
import styles from "./layout.module.css"
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import { FontPreload } from "@/fonts/font-preloading"
|
||||
import { getMessages } from "@/i18n"
|
||||
import ClientIntlProvider from "@/i18n/Provider"
|
||||
import { setLang } from "@/i18n/serverContext"
|
||||
import { trackAccordionClick } from "@/utils/tracking"
|
||||
import { trackBookingSearchClick } from "@/utils/tracking/booking"
|
||||
|
||||
import type { LangParams, LayoutArgs } from "@/types/params"
|
||||
@@ -72,6 +73,7 @@ export default async function RootLayout(
|
||||
<BookingFlowTrackingProvider
|
||||
trackingFunctions={{
|
||||
trackBookingSearchClick,
|
||||
trackAccordionItemOpen: trackAccordionClick,
|
||||
}}
|
||||
>
|
||||
<RouteChange />
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import AdditionalAmenities from "@scandic-hotels/booking-flow/components/AdditionalAmenities"
|
||||
import BreakfastAccordionItem from "@scandic-hotels/booking-flow/components/SidePeekAccordions/BreakfastAccordionItem"
|
||||
import CheckInCheckOutAccordionItem from "@scandic-hotels/booking-flow/components/SidePeekAccordions/CheckInCheckOutAccordionItem"
|
||||
import ParkingAccordionItem from "@scandic-hotels/booking-flow/components/SidePeekAccordions/ParkingAccordionItem"
|
||||
import Accordion from "@scandic-hotels/design-system/Accordion"
|
||||
import SidePeek from "@scandic-hotels/design-system/SidePeek"
|
||||
|
||||
import AccessibilityAccordionItem from "@/components/SidePeeks/AmenitiesSidepeekContent/Accordions/Accessibility"
|
||||
import BreakfastAccordionItem from "@/components/SidePeeks/AmenitiesSidepeekContent/Accordions/Breakfast"
|
||||
import CheckInCheckOutAccordionItem from "@/components/SidePeeks/AmenitiesSidepeekContent/Accordions/CheckInCheckOut"
|
||||
import ParkingAccordionItem from "@/components/SidePeeks/AmenitiesSidepeekContent/Accordions/Parking"
|
||||
import AdditionalAmenities from "@/components/SidePeeks/AmenitiesSidepeekContent/AdditionalAmenities"
|
||||
import { getIntl } from "@/i18n"
|
||||
import { appendSlugToPathname } from "@/utils/appendSlugToPathname"
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@ import { cx } from "class-variance-authority"
|
||||
import { useRef, useState } from "react"
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import { FacilityIcon } from "@scandic-hotels/design-system/Icons/FacilityIcon"
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
|
||||
import { FacilityIcon } from "@/components/SidePeeks/RoomSidePeek/facilityIcon"
|
||||
import ShowMoreButton from "@/components/TempDesignSystem/ShowMoreButton"
|
||||
|
||||
import styles from "./roomFacilities.module.css"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
|
||||
import { getBedIconName } from "@/components/SidePeeks/RoomSidePeek/bedIcon"
|
||||
import { getBedIconName } from "@/components/utils"
|
||||
import { getIntl } from "@/i18n"
|
||||
|
||||
import { getBedDescriptionText } from "../utils"
|
||||
|
||||
@@ -15,7 +15,7 @@ export default function SidePeeks({ hotelId, children }: SidePeeksProps) {
|
||||
const searchParams = useSearchParams()
|
||||
|
||||
function handleOpen(sidePeek: string) {
|
||||
trackOpenSidePeekEvent(sidePeek, hotelId)
|
||||
trackOpenSidePeekEvent({ name: sidePeek, hotelId })
|
||||
}
|
||||
|
||||
function handleClose() {
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
import { DialogTrigger } from "react-aria-components"
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import { RoomSidePeekContent } from "@scandic-hotels/booking-flow/components/RoomSidePeekContent"
|
||||
import { Button } from "@scandic-hotels/design-system/Button"
|
||||
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
||||
import { getBookedHotelRoom } from "@scandic-hotels/trpc/routers/booking/helpers"
|
||||
|
||||
import { useBookingConfirmationStore } from "@/stores/booking-confirmation"
|
||||
|
||||
import { RoomSidePeekContent } from "@/components/SidePeeks/RoomSidePeek/RoomSidePeekContent"
|
||||
import SidePeekSelfControlled from "@/components/TempDesignSystem/SidePeekSelfControlled"
|
||||
|
||||
interface RoomDetailsSidePeekProps {
|
||||
|
||||
@@ -4,9 +4,9 @@ import { zodResolver } from "@hookform/resolvers/zod"
|
||||
import { useCallback, useEffect, useState } from "react"
|
||||
import { FormProvider, useForm } from "react-hook-form"
|
||||
|
||||
import { BED_TYPE_ICONS } from "@scandic-hotels/booking-flow/bedTypeIcons"
|
||||
import RadioCard from "@scandic-hotels/design-system/Form/RadioCard"
|
||||
|
||||
import { BED_TYPE_ICONS } from "@/constants/booking"
|
||||
import { useEnterDetailsStore } from "@/stores/enter-details"
|
||||
|
||||
import { useRoomContext } from "@/contexts/Details/Room"
|
||||
|
||||
@@ -2,12 +2,14 @@
|
||||
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import useSidePeekStore, {
|
||||
SidePeekEnum,
|
||||
} from "@scandic-hotels/booking-flow/stores/sidepeek"
|
||||
import { Button } from "@scandic-hotels/design-system/Button"
|
||||
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
||||
|
||||
import useSidePeekStore from "@/stores/sidepeek"
|
||||
import { trackOpenSidePeekEvent } from "@/utils/tracking"
|
||||
|
||||
import { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
import type { ToggleSidePeekProps } from "@/types/components/hotelReservation/toggleSidePeekProps"
|
||||
|
||||
export default function ToggleSidePeek({ hotelId }: ToggleSidePeekProps) {
|
||||
@@ -16,7 +18,14 @@ export default function ToggleSidePeek({ hotelId }: ToggleSidePeekProps) {
|
||||
|
||||
return (
|
||||
<Button
|
||||
onPress={() => openSidePeek({ key: SidePeekEnum.hotelDetails, hotelId })}
|
||||
onPress={() => {
|
||||
openSidePeek({ key: SidePeekEnum.hotelDetails, hotelId })
|
||||
trackOpenSidePeekEvent({
|
||||
name: SidePeekEnum.hotelDetails,
|
||||
hotelId,
|
||||
includePathname: true,
|
||||
})
|
||||
}}
|
||||
size="Small"
|
||||
variant="Secondary"
|
||||
color="Inverted"
|
||||
|
||||
@@ -2,12 +2,14 @@
|
||||
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import useSidePeekStore, {
|
||||
SidePeekEnum,
|
||||
} from "@scandic-hotels/booking-flow/stores/sidepeek"
|
||||
import { Button } from "@scandic-hotels/design-system/Button"
|
||||
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
||||
|
||||
import useSidePeekStore from "@/stores/sidepeek"
|
||||
import { trackOpenSidePeekEvent } from "@/utils/tracking"
|
||||
|
||||
import { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
import type { ToggleSidePeekProps } from "@/types/components/hotelReservation/toggleSidePeekProps"
|
||||
|
||||
export default function ToggleSidePeek({
|
||||
@@ -20,9 +22,15 @@ export default function ToggleSidePeek({
|
||||
|
||||
return (
|
||||
<Button
|
||||
onPress={() =>
|
||||
onPress={() => {
|
||||
openSidePeek({ key: SidePeekEnum.roomDetails, hotelId, roomTypeCode })
|
||||
}
|
||||
trackOpenSidePeekEvent({
|
||||
name: SidePeekEnum.roomDetails,
|
||||
hotelId,
|
||||
roomTypeCode,
|
||||
includePathname: true,
|
||||
})
|
||||
}}
|
||||
size="Small"
|
||||
variant="Text"
|
||||
wrapping
|
||||
|
||||
@@ -11,6 +11,7 @@ import { memo } from "react"
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import TripAdvisorChip from "@scandic-hotels/booking-flow/components/TripAdvisorChip"
|
||||
import { SidePeekEnum } from "@scandic-hotels/booking-flow/stores/sidepeek"
|
||||
import {
|
||||
alternativeHotelsMap,
|
||||
selectHotelMap,
|
||||
@@ -44,7 +45,6 @@ import type { Lang } from "@scandic-hotels/common/constants/language"
|
||||
|
||||
import { HotelCardListingTypeEnum } from "@/types/components/hotelReservation/selectHotel/hotelCardListingProps"
|
||||
import type { HotelCardProps } from "@/types/components/hotelReservation/selectHotel/hotelCardProps"
|
||||
import { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
|
||||
function HotelCard({
|
||||
hotelData: { availability, hotel },
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { cookies } from "next/headers"
|
||||
import { notFound } from "next/navigation"
|
||||
|
||||
import SidePeek from "@scandic-hotels/booking-flow/components/HotelReservationSidePeek"
|
||||
import { dt } from "@scandic-hotels/common/dt"
|
||||
import { logger } from "@scandic-hotels/common/logger"
|
||||
import * as maskValue from "@scandic-hotels/common/utils/maskValue"
|
||||
@@ -35,7 +36,6 @@ import Promo from "@/components/HotelReservation/MyStay/Promo"
|
||||
import { ReferenceCard } from "@/components/HotelReservation/MyStay/ReferenceCard"
|
||||
import MultiRoom from "@/components/HotelReservation/MyStay/Rooms/MultiRoom"
|
||||
import SingleRoom from "@/components/HotelReservation/MyStay/Rooms/SingleRoom"
|
||||
import SidePeek from "@/components/HotelReservation/SidePeek"
|
||||
import { getIntl } from "@/i18n"
|
||||
import MyStayProvider from "@/providers/MyStay"
|
||||
import { isLoggedInUser } from "@/utils/isLoggedInUser"
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
"use client"
|
||||
import { useEffect } from "react"
|
||||
|
||||
import useSidePeekStore from "@scandic-hotels/booking-flow/stores/sidepeek"
|
||||
import { Button } from "@scandic-hotels/design-system/Button"
|
||||
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
||||
|
||||
import useSidePeekStore from "@/stores/sidepeek"
|
||||
import { trackOpenSidePeekEvent } from "@/utils/tracking"
|
||||
|
||||
import type { ReadMoreProps } from "@/types/components/hotelReservation/selectHotel/selectHotel"
|
||||
|
||||
@@ -29,6 +30,11 @@ export default function ReadMore({
|
||||
<Button
|
||||
onPress={() => {
|
||||
openSidePeek({ key: sidePeekKey, hotelId, showCTA })
|
||||
trackOpenSidePeekEvent({
|
||||
name: sidePeekKey,
|
||||
hotelId,
|
||||
includePathname: true,
|
||||
})
|
||||
}}
|
||||
variant="Text"
|
||||
typography="Body/Paragraph/mdBold"
|
||||
|
||||
@@ -4,6 +4,7 @@ import { useState } from "react"
|
||||
import { Button as ButtonRAC } from "react-aria-components"
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import { SidePeekEnum } from "@scandic-hotels/booking-flow/stores/sidepeek"
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
|
||||
import { FacilityToIcon } from "@/components/ContentType/HotelPage/data"
|
||||
@@ -14,8 +15,6 @@ import styles from "./hotelDescription.module.css"
|
||||
|
||||
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
import { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
|
||||
export default function HotelDescription({
|
||||
description,
|
||||
hotel,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import TripAdvisorChip from "@scandic-hotels/booking-flow/components/TripAdvisorChip"
|
||||
import { SidePeekEnum } from "@scandic-hotels/booking-flow/stores/sidepeek"
|
||||
import { dt } from "@scandic-hotels/common/dt"
|
||||
import { getSingleDecimal } from "@scandic-hotels/common/utils/numberFormatting"
|
||||
import { Divider } from "@scandic-hotels/design-system/Divider"
|
||||
@@ -20,7 +21,6 @@ import styles from "./hotelInfoCard.module.css"
|
||||
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
import type { SelectRateBooking } from "@/types/components/hotelReservation/selectRate/selectRate"
|
||||
import { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
|
||||
export type HotelInfoCardProps = {
|
||||
booking: SelectRateBooking
|
||||
|
||||
@@ -2,14 +2,16 @@
|
||||
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import useSidePeekStore, {
|
||||
SidePeekEnum,
|
||||
} from "@scandic-hotels/booking-flow/stores/sidepeek"
|
||||
import { Button } from "@scandic-hotels/design-system/Button"
|
||||
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
||||
|
||||
import useSidePeekStore from "@/stores/sidepeek"
|
||||
import { trackOpenSidePeekEvent } from "@/utils/tracking"
|
||||
|
||||
import styles from "./details.module.css"
|
||||
|
||||
import { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
import type { ToggleSidePeekProps } from "@/types/components/hotelReservation/toggleSidePeekProps"
|
||||
|
||||
export default function ToggleSidePeek({
|
||||
@@ -21,13 +23,19 @@ export default function ToggleSidePeek({
|
||||
|
||||
return (
|
||||
<Button
|
||||
onClick={() =>
|
||||
onClick={() => {
|
||||
openSidePeek({
|
||||
key: SidePeekEnum.roomDetails,
|
||||
hotelId,
|
||||
roomTypeCode,
|
||||
})
|
||||
}
|
||||
trackOpenSidePeekEvent({
|
||||
name: SidePeekEnum.roomDetails,
|
||||
hotelId,
|
||||
roomTypeCode,
|
||||
includePathname: true,
|
||||
})
|
||||
}}
|
||||
size="Small"
|
||||
variant="Text"
|
||||
wrapping
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import { FacilityIcon } from "@scandic-hotels/design-system/Icons/FacilityIcon"
|
||||
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
|
||||
import { getBedIconName } from "../RoomSidePeek/bedIcon"
|
||||
import { FacilityIcon } from "../RoomSidePeek/facilityIcon"
|
||||
import { getBedIconName } from "@/components/utils"
|
||||
|
||||
import styles from "./bookedRoomSidePeek.module.css"
|
||||
|
||||
|
||||
@@ -1,240 +0,0 @@
|
||||
import BathroomCabinetIcon from "@scandic-hotels/design-system/Icons/BathroomCabinetIcon"
|
||||
import BedHotelIcon from "@scandic-hotels/design-system/Icons/BedHotelIcon"
|
||||
import BowlingPinsIcon from "@scandic-hotels/design-system/Icons/BowlingPinsIcon"
|
||||
import BunkBedIcon from "@scandic-hotels/design-system/Icons/BunkBedIcon"
|
||||
import ConferenceRoomIcon from "@scandic-hotels/design-system/Icons/ConferenceRoomIcon"
|
||||
import CoolingIcon from "@scandic-hotels/design-system/Icons/CoolingIcon"
|
||||
import CouchTableIcon from "@scandic-hotels/design-system/Icons/CouchTableIcon"
|
||||
import DoorIcon from "@scandic-hotels/design-system/Icons/DoorIcon"
|
||||
import FootStoolIcon from "@scandic-hotels/design-system/Icons/FootStoolIcon"
|
||||
import HairdresserIcon from "@scandic-hotels/design-system/Icons/HairdresserIcon"
|
||||
import HairdryerIcon from "@scandic-hotels/design-system/Icons/HairdryerIcon"
|
||||
import HandSoapIcon from "@scandic-hotels/design-system/Icons/HandSoapIcon"
|
||||
import IceMachineIcon from "@scandic-hotels/design-system/Icons/IceMachineIcon"
|
||||
import MassageIcon from "@scandic-hotels/design-system/Icons/MassageIcon"
|
||||
import {
|
||||
MaterialIcon,
|
||||
type MaterialIconSetIconProps,
|
||||
} from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
||||
import MirrorIcon from "@scandic-hotels/design-system/Icons/MirrorIcon"
|
||||
import MovingBedsIcon from "@scandic-hotels/design-system/Icons/MovingBedsIcon"
|
||||
import RecordPlayerIcon from "@scandic-hotels/design-system/Icons/RecordPlayerIcon"
|
||||
import RoadIcon from "@scandic-hotels/design-system/Icons/RoadIcon"
|
||||
import RugIcon from "@scandic-hotels/design-system/Icons/RugIcon"
|
||||
import SafetyBoxIcon from "@scandic-hotels/design-system/Icons/SafetyBoxIcon"
|
||||
import SlippersIcon from "@scandic-hotels/design-system/Icons/SlippersIcon"
|
||||
import ToiletIcon from "@scandic-hotels/design-system/Icons/ToiletIcon"
|
||||
import TowelIcon from "@scandic-hotels/design-system/Icons/TowelIcon"
|
||||
import UserPoliceIcon from "@scandic-hotels/design-system/Icons/UserPoliceIcon"
|
||||
import ViewIcon from "@scandic-hotels/design-system/Icons/ViewIcon"
|
||||
import WardIcon from "@scandic-hotels/design-system/Icons/WardIcon"
|
||||
import WindowNotAvailableIcon from "@scandic-hotels/design-system/Icons/WindowNotAvailableIcon"
|
||||
import WoodFloorIcon from "@scandic-hotels/design-system/Icons/WoodFloorIcon"
|
||||
|
||||
import type {
|
||||
IconProps,
|
||||
NucleoIconProps,
|
||||
} from "@scandic-hotels/design-system/Icons"
|
||||
import type { MaterialSymbolProps } from "@scandic-hotels/design-system/Icons/MaterialIcon/MaterialSymbol"
|
||||
import type { JSX } from "react"
|
||||
|
||||
interface FacilityIconProps {
|
||||
name: string | undefined
|
||||
}
|
||||
export function FacilityIcon({
|
||||
name,
|
||||
...props
|
||||
}:
|
||||
| (FacilityIconProps & MaterialIconSetIconProps)
|
||||
| NucleoIconProps
|
||||
| IconProps): JSX.Element {
|
||||
if (!name) {
|
||||
return <MaterialIcon icon="favorite" {...props} />
|
||||
}
|
||||
|
||||
const normalizedName = name.toLowerCase()
|
||||
|
||||
const customIcon = CustomIconMappings.find(
|
||||
(icon) => icon.name.toLowerCase() === normalizedName
|
||||
)
|
||||
if (customIcon) {
|
||||
return <customIcon.icon {...props} />
|
||||
}
|
||||
|
||||
const materialSymbolIcon = MaterialIconMappings.find(
|
||||
(icon) => icon.name.toLowerCase() === normalizedName
|
||||
)
|
||||
|
||||
return materialSymbolIcon ? (
|
||||
<MaterialIcon icon={materialSymbolIcon.icon} {...props} />
|
||||
) : (
|
||||
<MaterialIcon icon="favorite" {...props} />
|
||||
)
|
||||
}
|
||||
|
||||
const MaterialIconMappings: {
|
||||
icon: MaterialSymbolProps["icon"]
|
||||
name: string
|
||||
}[] = [
|
||||
{ icon: "air_purifier_gen", name: "aircondition" },
|
||||
{ icon: "travel", name: "airport" },
|
||||
{ icon: "balcony", name: "balcony" },
|
||||
{ icon: "deck", name: "balconyorterrace" },
|
||||
{ icon: "balcony", name: "frenchbalcony" },
|
||||
{ icon: "bathtub", name: "bathroomwithbathtub" },
|
||||
{ icon: "bathtub", name: "bathroomwithshowerandbathtub" },
|
||||
{ icon: "bed", name: "setoftwopillows" },
|
||||
{ icon: "chair", name: "armchairbed" },
|
||||
{ icon: "meeting_room", name: "separatebedroom" },
|
||||
{ icon: "pedal_bike", name: "bikeforloan" },
|
||||
{ icon: "bakery_dining", name: "breakfast" },
|
||||
{ icon: "bakery_dining", name: "servesbreakfastalwaysincluded" },
|
||||
{ icon: "business_center", name: "meetingconferencefacilities" },
|
||||
{ icon: "business_center", name: "meetingrooms" },
|
||||
{ icon: "router", name: "internetwithcableintheroom" },
|
||||
{ icon: "chair", name: "armchair" },
|
||||
{ icon: "chair", name: "chair" },
|
||||
{ icon: "meeting_room", name: "connectingrooms" },
|
||||
{ icon: "location_city", name: "viewcityview" },
|
||||
{ icon: "coffee_maker", name: "nespressomachine" },
|
||||
{ icon: "dining", name: "café" },
|
||||
{ icon: "coffee", name: "coffee" },
|
||||
{ icon: "coffee_maker", name: "coffeemachine" },
|
||||
{ icon: "concierge", name: "lifestyleconcierge" },
|
||||
{ icon: "mode_fan", name: "aircooling" },
|
||||
{ icon: "mode_fan", name: "cooler" },
|
||||
{ icon: "desk", name: "deskandchair" },
|
||||
{ icon: "desk", name: "desk" },
|
||||
{ icon: "dining", name: "diningarea" },
|
||||
{ icon: "table_bar", name: "tablefordining" },
|
||||
{ icon: "electric_bike", name: "ebikeschargingstation" },
|
||||
{ icon: "family_restroom", name: "extrafamilyfriendly" },
|
||||
{ icon: "exercise", name: "gym" },
|
||||
{ icon: "health_and_beauty", name: "beautysalon" },
|
||||
{ icon: "bathroom", name: "bathroom2separatebathrooms" },
|
||||
{ icon: "credit_card_heart", name: "cashfree800pmtill0600am" },
|
||||
{ icon: "credit_card_heart", name: "cashfreehotel" },
|
||||
{ icon: "confirmation_number", name: "coffeevoucher" },
|
||||
{ icon: "water_full", name: "complimentarycoldrefreshments" },
|
||||
{ icon: "groups", name: "conventioncentre" },
|
||||
{ icon: "accessible", name: "disabledparking" },
|
||||
{ icon: "charging_station", name: "dockingstationforipodipad" },
|
||||
{ icon: "cool_to_dry", name: "dryingcabinet" },
|
||||
{ icon: "assistant_navigation", name: "easyaccess" },
|
||||
{ icon: "laundry", name: "garmentsteamer" },
|
||||
{ icon: "stairs", name: "highfloor" },
|
||||
{ icon: "hot_tub", name: "jaccuzzi" },
|
||||
{ icon: "hot_tub", name: "jacuzzi" },
|
||||
{ icon: "countertops", name: "kitchen" },
|
||||
{ icon: "countertops", name: "kitchenette" },
|
||||
{ icon: "checked_bag", name: "latecheckoutuntil1400guaranteed" },
|
||||
{ icon: "music_cast", name: "livemusicexhibitions" },
|
||||
{ icon: "liquor", name: "minibarincludedinroomrate" },
|
||||
{ icon: "local_parking", name: "parkingadditionalcost" },
|
||||
{ icon: "sauna", name: "privatesauna" },
|
||||
{ icon: "kitchen", name: "refrigerator" },
|
||||
{ icon: "airline_seat_recline_normal", name: "seatingarea" },
|
||||
{ icon: "scene", name: "separatelivingroom" },
|
||||
{ icon: "chair", name: "sofabed" },
|
||||
{ icon: "chair", name: "sofas" },
|
||||
{ icon: "chair", name: "sofa" },
|
||||
{ icon: "bedroom_parent", name: "spaciousroom" },
|
||||
{ icon: "local_drink", name: "stillandsparklingwater" },
|
||||
{ icon: "table_bar", name: "table" },
|
||||
{ icon: "coffee_maker", name: "tassimocoffeemaker" },
|
||||
{ icon: "deck", name: "terrace" },
|
||||
{ icon: "iron", name: "trouserpress" },
|
||||
{ icon: "tv_guide", name: "tv" },
|
||||
{ icon: "tv_remote", name: "tvwithcomplimentarymoviechannels" },
|
||||
{ icon: "tv_remote", name: "tvwithmoviechannels" },
|
||||
{ icon: "live_tv", name: "tvwithstreamingoption" },
|
||||
{ icon: "hvac", name: "ventilationinroom" },
|
||||
{ icon: "landscape", name: "viewfjordview" },
|
||||
{ icon: "houseboat", name: "viewlakeview" },
|
||||
{ icon: "panorama", name: "viewpanoramicview" },
|
||||
{ icon: "sailing", name: "viewseaview" },
|
||||
{ icon: "ward", name: "wallbed" },
|
||||
{ icon: "pedal_bike", name: "wallmountedcyclerack" },
|
||||
{ icon: "dresser", name: "wardrobe" },
|
||||
{ icon: "spa", name: "wellnessandsaunaentrancefeeadmission16years" },
|
||||
{ icon: "spa", name: "wellnesspoolsaunaentrancefeeadmission16years" },
|
||||
{ icon: "curtains", name: "windownook" },
|
||||
{ icon: "iron", name: "ironandironingboard" },
|
||||
{ icon: "iron", name: "ironingroom" },
|
||||
{ icon: "kayaking", name: "kayaksforloan" },
|
||||
{ icon: "kettle", name: "kettle" },
|
||||
{ icon: "kettle", name: "kettlewithcoffee" },
|
||||
{ icon: "sync_saved_locally", name: "laptopsafe" },
|
||||
{ icon: "computer", name: "laptoptray" },
|
||||
{ icon: "local_laundry_service", name: "laundryservice" },
|
||||
{ icon: "local_bar", name: "bar" },
|
||||
{ icon: "deck", name: "rooftopbar" },
|
||||
{ icon: "local_bar", name: "skybar" },
|
||||
{ icon: "microwave", name: "microwave" },
|
||||
{ icon: "nature", name: "viewparkview" },
|
||||
{ icon: "nightlife", name: "disconightclub" },
|
||||
{ icon: "smoke_free", name: "nonsmoking" },
|
||||
{ icon: "deck", name: "outdoorterrace" },
|
||||
{ icon: "local_parking", name: "parking" },
|
||||
{ icon: "local_parking", name: "parkingfreeparking" },
|
||||
{ icon: "pets", name: "petfriendlyrooms" },
|
||||
{ icon: "phone", name: "directdialphoneandvoicemail" },
|
||||
{ icon: "restaurant", name: "restaurant" },
|
||||
{ icon: "room_service", name: "roomservice" },
|
||||
{ icon: "sauna", name: "sauna" },
|
||||
{ icon: "shower", name: "bathroomwithshower" },
|
||||
{ icon: "shower", name: "rainshower" },
|
||||
{ icon: "shower", name: "sharedbathroomwithshower" },
|
||||
{ icon: "radio", name: "musicplayer" },
|
||||
{ icon: "shopping_bag", name: "shop" },
|
||||
{ icon: "pool", name: "pool" },
|
||||
{ icon: "laundry", name: "handwash" },
|
||||
{ icon: "connected_tv", name: "tvwithchromecast" },
|
||||
{ icon: "wifi", name: "freewifi" },
|
||||
{ icon: "curtains_closed", name: "blackoutcurtains" },
|
||||
{ icon: "liquor", name: "minibar" },
|
||||
{ icon: "yard", name: "viewatriumview" },
|
||||
]
|
||||
|
||||
const CustomIconMappings = [
|
||||
{ icon: BathroomCabinetIcon, name: "bathroomwithshowerorbathtub" },
|
||||
{ icon: MovingBedsIcon, name: "adjustablebeds" },
|
||||
{ icon: MovingBedsIcon, name: "pulloutbed" },
|
||||
{ icon: BedHotelIcon, name: "extrabed" },
|
||||
{ icon: CoolingIcon, name: "coolingcabinet" },
|
||||
{ icon: FootStoolIcon, name: "footstool" },
|
||||
{ icon: HairdryerIcon, name: "hairdryer" },
|
||||
{ icon: HairdresserIcon, name: "hairdresser" },
|
||||
{ icon: HandSoapIcon, name: "toiletries" },
|
||||
{ icon: TowelIcon, name: "bathrobes" },
|
||||
{ icon: HandSoapIcon, name: "bodycareproducts" },
|
||||
{ icon: HandSoapIcon, name: "bodylotion" },
|
||||
{ icon: BowlingPinsIcon, name: "bowling" },
|
||||
{ icon: BunkBedIcon, name: "bunkbed" },
|
||||
{ icon: BunkBedIcon, name: "bunkbed80x188cm" },
|
||||
{ icon: IceMachineIcon, name: "icemachine" },
|
||||
{ icon: IceMachineIcon, name: "icemachinereception" },
|
||||
{ icon: MassageIcon, name: "massage" },
|
||||
{ icon: ConferenceRoomIcon, name: "meetingarea" },
|
||||
{ icon: UserPoliceIcon, name: "overnightsecurity" },
|
||||
{ icon: UserPoliceIcon, name: "security24hoours" },
|
||||
{ icon: UserPoliceIcon, name: "servicesecurity24h" },
|
||||
{ icon: FootStoolIcon, name: "footstool" },
|
||||
{ icon: WindowNotAvailableIcon, name: "nowindow" },
|
||||
{ icon: DoorIcon, name: "luggagelockers" },
|
||||
{ icon: MirrorIcon, name: "cosmeticmirror" },
|
||||
{ icon: WardIcon, name: "wallbed" },
|
||||
{ icon: CouchTableIcon, name: "sofawithtable" },
|
||||
{ icon: SafetyBoxIcon, name: "safetybox" },
|
||||
{ icon: RecordPlayerIcon, name: "modernvinylplayer" },
|
||||
{ icon: RugIcon, name: "carpetingwalltowallcarpet" },
|
||||
{ icon: ToiletIcon, name: "separatetoilet" },
|
||||
{ icon: WoodFloorIcon, name: "woodenfloor" },
|
||||
{ icon: ViewIcon, name: "view" },
|
||||
{ icon: HandSoapIcon, name: "shampoo" },
|
||||
{ icon: HandSoapIcon, name: "conditioner" },
|
||||
{ icon: RoadIcon, name: "viewstreetview" },
|
||||
{ icon: SlippersIcon, name: "slippers" },
|
||||
{ icon: HandSoapIcon, name: "showergel" },
|
||||
{ icon: HandSoapIcon, name: "showerproductsscentbygrandcentral" },
|
||||
]
|
||||
@@ -1,20 +1,4 @@
|
||||
import BedBunkExtraIcon from "@scandic-hotels/design-system/Icons/BedBunkExtraIcon"
|
||||
import BedGenericIcon from "@scandic-hotels/design-system/Icons/BedGenericIcon"
|
||||
import BedKingIcon from "@scandic-hotels/design-system/Icons/BedKingIcon"
|
||||
import BedPullOutExtraIcon from "@scandic-hotels/design-system/Icons/BedPullOutExtraIcon"
|
||||
import BedQueenIcon from "@scandic-hotels/design-system/Icons/BedQueenIcon"
|
||||
import BedSingleIcon from "@scandic-hotels/design-system/Icons/BedSingleIcon"
|
||||
import BedSofaExtraIcon from "@scandic-hotels/design-system/Icons/BedSofaExtraIcon"
|
||||
import BedTwinIcon from "@scandic-hotels/design-system/Icons/BedTwinIcon"
|
||||
import BedWallExtraIcon from "@scandic-hotels/design-system/Icons/BedWallExtraIcon"
|
||||
|
||||
import type { PaymentMethodEnum } from "@scandic-hotels/common/constants/paymentMethod"
|
||||
import type { IconProps } from "@scandic-hotels/design-system/Icons"
|
||||
import type {
|
||||
BedTypeEnum,
|
||||
ExtraBedTypeEnum,
|
||||
} from "@scandic-hotels/trpc/enums/bedType"
|
||||
import type { JSX } from "react"
|
||||
|
||||
export const FamilyAndFriendsCodes = ["D000029555", "D000029271", "D000029195"]
|
||||
|
||||
@@ -72,25 +56,6 @@ export const PAYMENT_METHOD_ICONS: Record<
|
||||
discover: "/_static/icons/payment/discover.svg",
|
||||
}
|
||||
|
||||
export type BedTypes = keyof typeof BedTypeEnum | keyof typeof ExtraBedTypeEnum
|
||||
|
||||
export const BED_TYPE_ICONS: Record<
|
||||
BedTypes,
|
||||
(props: IconProps) => JSX.Element
|
||||
> = {
|
||||
King: BedKingIcon,
|
||||
Queen: BedQueenIcon,
|
||||
Single: BedSingleIcon,
|
||||
Twin: BedTwinIcon,
|
||||
CustomOccupancy: BedGenericIcon,
|
||||
|
||||
SofaBed: BedSofaExtraIcon,
|
||||
WallBed: BedWallExtraIcon,
|
||||
BunkBed: BedBunkExtraIcon,
|
||||
PullOutBed: BedPullOutExtraIcon,
|
||||
Other: BedGenericIcon,
|
||||
}
|
||||
|
||||
export enum CancellationRuleEnum {
|
||||
CancellableBefore6PM = "CancellableBefore6PM",
|
||||
NonCancellable = "NonCancellable",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
import type { SidePeekEnum } from "@scandic-hotels/booking-flow/stores/sidepeek"
|
||||
import type {
|
||||
AdditionalData,
|
||||
Hotel,
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
import type { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
import type {
|
||||
AdditionalData,
|
||||
Hotel,
|
||||
Restaurant,
|
||||
} from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
export type HotelSidePeekProps = {
|
||||
hotel: Hotel & { url: string | null }
|
||||
restaurants: Restaurant[]
|
||||
additionalHotelData: AdditionalData | undefined
|
||||
activeSidePeek: SidePeekEnum
|
||||
close: () => void
|
||||
showCTA: boolean
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
import type { BookingSearchType } from "@scandic-hotels/booking-flow/searchType"
|
||||
import type { SidePeekEnum } from "@scandic-hotels/booking-flow/stores/sidepeek"
|
||||
import type { Child } from "@scandic-hotels/trpc/types/child"
|
||||
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
import type { SidePeekEnum } from "../sidePeek"
|
||||
|
||||
export interface ReadMoreProps {
|
||||
label: string
|
||||
@@ -11,10 +9,6 @@ export interface ReadMoreProps {
|
||||
sidePeekKey: SidePeekEnum
|
||||
}
|
||||
|
||||
export interface ContactProps {
|
||||
hotel: Hotel
|
||||
}
|
||||
|
||||
export type SelectHotelBooking = {
|
||||
hotelId?: string
|
||||
city?: string
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
export enum SidePeekEnum {
|
||||
hotelDetails = "hotel-detail-side-peek",
|
||||
roomDetails = "room-detail-side-peek",
|
||||
bookedRoomDetails = "booked-room-detail-side-peek",
|
||||
}
|
||||
@@ -1,30 +1,4 @@
|
||||
import type {
|
||||
CheckInData,
|
||||
DetailedFacility,
|
||||
Parking,
|
||||
Restaurant,
|
||||
} from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
export interface ParkingAccordionItemProps {
|
||||
parkingPageHref?: string | null
|
||||
parking: Parking[]
|
||||
elevatorPitch?: string
|
||||
}
|
||||
|
||||
export interface BreakfastAccordionItemProps {
|
||||
restaurants?: Restaurant[]
|
||||
hotelType: string
|
||||
}
|
||||
|
||||
export interface CheckInCheckOutAccordionItemProps {
|
||||
checkInData: CheckInData
|
||||
}
|
||||
|
||||
export interface AccessibilityAccordionItemProps {
|
||||
elevatorPitch?: string
|
||||
accessibilityPageHref?: string | null
|
||||
}
|
||||
|
||||
export interface AdditionalAmenitiesProps {
|
||||
amenities: DetailedFacility[]
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
import type { Room } from "@scandic-hotels/trpc/types/hotel"
|
||||
import type { SidePeekEnum } from "../hotelReservation/sidePeek"
|
||||
|
||||
export type RoomSidePeekProps = {
|
||||
room: Room
|
||||
activeSidePeek: SidePeekEnum | null
|
||||
close: () => void
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
"use client"
|
||||
import { trackEvent } from "./base"
|
||||
|
||||
export function trackAccordionClick(option: string) {
|
||||
@@ -10,12 +11,17 @@ export function trackAccordionClick(option: string) {
|
||||
})
|
||||
}
|
||||
|
||||
export function trackOpenSidePeekEvent(
|
||||
name: string | null,
|
||||
hotelId: string,
|
||||
pathName?: string,
|
||||
export function trackOpenSidePeekEvent({
|
||||
name,
|
||||
hotelId,
|
||||
includePathname,
|
||||
roomTypeCode,
|
||||
}: {
|
||||
name: string | null
|
||||
hotelId: string
|
||||
includePathname?: boolean
|
||||
roomTypeCode?: string | null
|
||||
) {
|
||||
}) {
|
||||
trackEvent({
|
||||
event: "openSidePeek",
|
||||
hotelInfo: {
|
||||
@@ -24,7 +30,7 @@ export function trackOpenSidePeekEvent(
|
||||
cta: {
|
||||
name,
|
||||
...(roomTypeCode ? { roomTypeCode } : {}),
|
||||
...(pathName ? { pathName } : {}),
|
||||
...(includePathname ? { pathName: window.location.pathname } : {}),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
import { FacilityEnum } from "@scandic-hotels/trpc/enums/facilities"
|
||||
|
||||
import { FacilityToIcon } from "../../../ContentType/HotelPage/data"
|
||||
import { FacilityToIcon } from "../TEMP/FacilityToIcon"
|
||||
|
||||
import styles from "./additionalAmenities.module.css"
|
||||
|
||||
import type { AdditionalAmenitiesProps } from "@/types/components/sidePeeks/amenities"
|
||||
import type { DetailedFacility } from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
interface AdditionalAmenitiesProps {
|
||||
amenities: DetailedFacility[]
|
||||
}
|
||||
|
||||
export default function AdditionalAmenities({
|
||||
amenities,
|
||||
@@ -8,11 +8,15 @@ import InstagramIcon from "@scandic-hotels/design-system/Icons/InstagramIcon"
|
||||
import Image from "@scandic-hotels/design-system/Image"
|
||||
import Link from "@scandic-hotels/design-system/Link"
|
||||
|
||||
import useLang from "@/hooks/useLang"
|
||||
import useLang from "../../hooks/useLang"
|
||||
|
||||
import styles from "./contact.module.css"
|
||||
|
||||
import type { ContactProps } from "@/types/components/hotelReservation/selectHotel/selectHotel"
|
||||
import type { Hotel } from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
interface ContactProps {
|
||||
hotel: Hotel
|
||||
}
|
||||
|
||||
export default function Contact({ hotel }: ContactProps) {
|
||||
const lang = useLang()
|
||||
@@ -4,11 +4,10 @@ import { useEffect } from "react"
|
||||
|
||||
import { trpc } from "@scandic-hotels/trpc/client"
|
||||
|
||||
import useSidePeekStore from "@/stores/sidepeek"
|
||||
|
||||
import HotelSidePeek from "@/components/SidePeeks/HotelSidePeek"
|
||||
import RoomSidePeek from "@/components/SidePeeks/RoomSidePeek"
|
||||
import useLang from "@/hooks/useLang"
|
||||
import useLang from "../../hooks/useLang"
|
||||
import useSidePeekStore from "../../stores/sidepeek"
|
||||
import HotelSidePeek from "../HotelSidePeek"
|
||||
import RoomSidePeek from "../RoomSidePeek"
|
||||
|
||||
export default function HotelReservationSidePeek() {
|
||||
const { activeSidePeek, hotelId, roomTypeCode, showCTA } = useSidePeekStore(
|
||||
@@ -3,22 +3,36 @@
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import Accordion from "@scandic-hotels/design-system/Accordion"
|
||||
import AccordionItem from "@scandic-hotels/design-system/Accordion/AccordionItem"
|
||||
import ButtonLink from "@scandic-hotels/design-system/ButtonLink"
|
||||
import { IconName } from "@scandic-hotels/design-system/Icons/iconName"
|
||||
import SidePeek from "@scandic-hotels/design-system/SidePeek"
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
|
||||
import Contact from "@/components/HotelReservation/Contact"
|
||||
import AdditionalAmenities from "@/components/SidePeeks/AmenitiesSidepeekContent/AdditionalAmenities"
|
||||
|
||||
import AccessibilityAccordionItem from "../AmenitiesSidepeekContent/Accordions/Accessibility"
|
||||
import BreakfastAccordionItem from "../AmenitiesSidepeekContent/Accordions/Breakfast"
|
||||
import CheckInCheckOutAccordionItem from "../AmenitiesSidepeekContent/Accordions/CheckInCheckOut"
|
||||
import ParkingAccordionItem from "../AmenitiesSidepeekContent/Accordions/Parking"
|
||||
import { SidePeekEnum } from "../../stores/sidepeek"
|
||||
import { useTrackingContext } from "../../trackingContext"
|
||||
import AdditionalAmenities from "../AdditionalAmenities"
|
||||
import Contact from "../Contact"
|
||||
import BreakfastAccordionItem from "../SidePeekAccordions/BreakfastAccordionItem"
|
||||
import CheckInCheckOutAccordionItem from "../SidePeekAccordions/CheckInCheckOutAccordionItem"
|
||||
import ParkingAccordionItem from "../SidePeekAccordions/ParkingAccordionItem"
|
||||
|
||||
import styles from "./hotelSidePeek.module.css"
|
||||
|
||||
import type { HotelSidePeekProps } from "@/types/components/hotelReservation/hotelSidePeek"
|
||||
import { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
import type {
|
||||
AdditionalData,
|
||||
Hotel,
|
||||
Restaurant,
|
||||
} from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
type HotelSidePeekProps = {
|
||||
hotel: Hotel & { url: string | null }
|
||||
restaurants: Restaurant[]
|
||||
additionalHotelData: AdditionalData | undefined
|
||||
activeSidePeek: SidePeekEnum
|
||||
close: () => void
|
||||
showCTA: boolean
|
||||
}
|
||||
|
||||
export default function HotelSidePeek({
|
||||
hotel,
|
||||
@@ -79,3 +93,36 @@ export default function HotelSidePeek({
|
||||
</SidePeek>
|
||||
)
|
||||
}
|
||||
|
||||
type AccessibilityAccordionItemProps = {
|
||||
elevatorPitch?: string
|
||||
}
|
||||
|
||||
function AccessibilityAccordionItem({
|
||||
elevatorPitch,
|
||||
}: AccessibilityAccordionItemProps) {
|
||||
const intl = useIntl()
|
||||
const tracking = useTrackingContext()
|
||||
|
||||
if (!elevatorPitch) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<AccordionItem
|
||||
title={intl.formatMessage({
|
||||
defaultMessage: "Accessibility",
|
||||
})}
|
||||
iconName={IconName.Accessibility}
|
||||
className={styles.accordionItem}
|
||||
variant="sidepeek"
|
||||
onOpen={() => tracking.trackAccordionItemOpen("amenities:accessibility")}
|
||||
>
|
||||
<div className={styles.accessibilityContent}>
|
||||
<Typography variant="Body/Paragraph/mdRegular">
|
||||
<p>{elevatorPitch}</p>
|
||||
</Typography>
|
||||
</div>
|
||||
</AccordionItem>
|
||||
)
|
||||
}
|
||||
@@ -1,17 +1,14 @@
|
||||
import { useIntl } from "react-intl"
|
||||
|
||||
import { FacilityIcon } from "@scandic-hotels/design-system/Icons/FacilityIcon"
|
||||
import ImageGallery from "@scandic-hotels/design-system/ImageGallery"
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
|
||||
import { BED_TYPE_ICONS, type BedTypes } from "@/constants/booking"
|
||||
|
||||
import { mapApiImagesToGalleryImages } from "@/utils/imageGallery"
|
||||
|
||||
import { FacilityIcon } from "../facilityIcon"
|
||||
import { BED_TYPE_ICONS, type BedTypes } from "../../../misc/bedTypeIcons"
|
||||
|
||||
import styles from "./roomSidePeekContent.module.css"
|
||||
|
||||
import type { Room } from "@scandic-hotels/trpc/types/hotel"
|
||||
import type { ApiImage, Room } from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
interface RoomSidePeekContentProps {
|
||||
room: Room
|
||||
@@ -162,3 +159,16 @@ export function RoomSidePeekContent({ room }: RoomSidePeekContentProps) {
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function mapApiImagesToGalleryImages(apiImages: ApiImage[]) {
|
||||
return apiImages.map((apiImage) => ({
|
||||
src: apiImage.imageSizes.medium,
|
||||
alt:
|
||||
apiImage.metaData.altText ||
|
||||
apiImage.metaData.altText_En ||
|
||||
apiImage.metaData.title ||
|
||||
apiImage.metaData.title_En,
|
||||
caption: apiImage.metaData.title || apiImage.metaData.title_En,
|
||||
smallSrc: apiImage.imageSizes.small,
|
||||
}))
|
||||
}
|
||||
@@ -2,10 +2,16 @@ import { useIntl } from "react-intl"
|
||||
|
||||
import SidePeek from "@scandic-hotels/design-system/SidePeek"
|
||||
|
||||
import { SidePeekEnum } from "../../stores/sidepeek"
|
||||
import { RoomSidePeekContent } from "./RoomSidePeekContent"
|
||||
|
||||
import { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
import type { RoomSidePeekProps } from "@/types/components/sidePeeks/roomSidePeek"
|
||||
import type { Room } from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
export type RoomSidePeekProps = {
|
||||
room: Room
|
||||
activeSidePeek: SidePeekEnum | null
|
||||
close: () => void
|
||||
}
|
||||
|
||||
export default function RoomSidePeek({
|
||||
room,
|
||||
@@ -9,17 +9,23 @@ import OpeningHours from "@scandic-hotels/design-system/OpeningHours"
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
import { HotelTypeEnum } from "@scandic-hotels/trpc/enums/hotelType"
|
||||
|
||||
import { trackAccordionClick } from "@/utils/tracking"
|
||||
import { useTrackingContext } from "../../trackingContext"
|
||||
|
||||
import styles from "./sidePeekAccordion.module.css"
|
||||
|
||||
import type { BreakfastAccordionItemProps } from "@/types/components/sidePeeks/amenities"
|
||||
import type { Restaurant } from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
interface BreakfastAccordionItemProps {
|
||||
restaurants?: Restaurant[]
|
||||
hotelType: string
|
||||
}
|
||||
|
||||
export default function BreakfastAccordionItem({
|
||||
restaurants,
|
||||
hotelType,
|
||||
}: BreakfastAccordionItemProps) {
|
||||
const intl = useIntl()
|
||||
const tracking = useTrackingContext()
|
||||
|
||||
const openingHours = restaurants
|
||||
?.map((restaurant) => {
|
||||
@@ -43,7 +49,7 @@ export default function BreakfastAccordionItem({
|
||||
iconName={IconName.CoffeeAlt}
|
||||
variant="sidepeek"
|
||||
className={styles.accordionItem}
|
||||
onOpen={() => trackAccordionClick("amenities:breakfast")}
|
||||
onOpen={() => tracking.trackAccordionItemOpen("amenities:breakfast")}
|
||||
>
|
||||
{openingHours ? (
|
||||
<OpeningHours
|
||||
@@ -7,16 +7,21 @@ import { Divider } from "@scandic-hotels/design-system/Divider"
|
||||
import { IconName } from "@scandic-hotels/design-system/Icons/iconName"
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
|
||||
import { trackAccordionClick } from "@/utils/tracking"
|
||||
import { useTrackingContext } from "../../trackingContext"
|
||||
|
||||
import styles from "./sidePeekAccordion.module.css"
|
||||
|
||||
import type { CheckInCheckOutAccordionItemProps } from "@/types/components/sidePeeks/amenities"
|
||||
import type { CheckInData } from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
interface CheckInCheckOutAccordionItemProps {
|
||||
checkInData: CheckInData
|
||||
}
|
||||
|
||||
export default function CheckInCheckOutAccordionItem({
|
||||
checkInData,
|
||||
}: CheckInCheckOutAccordionItemProps) {
|
||||
const intl = useIntl()
|
||||
const tracking = useTrackingContext()
|
||||
|
||||
const { checkInTime, checkOutTime } = checkInData
|
||||
|
||||
@@ -26,7 +31,7 @@ export default function CheckInCheckOutAccordionItem({
|
||||
iconName={IconName.Business}
|
||||
variant="sidepeek"
|
||||
className={styles.accordionItem}
|
||||
onOpen={() => trackAccordionClick("amenities:check-in")}
|
||||
onOpen={() => tracking.trackAccordionItemOpen("amenities:check-in")}
|
||||
>
|
||||
<div className={styles.checkInCheckOutContent}>
|
||||
<Typography variant="Title/Overline/sm">
|
||||
@@ -8,11 +8,17 @@ import { IconName } from "@scandic-hotels/design-system/Icons/iconName"
|
||||
import ParkingInformation from "@scandic-hotels/design-system/ParkingInformation"
|
||||
import { Typography } from "@scandic-hotels/design-system/Typography"
|
||||
|
||||
import { trackAccordionClick } from "@/utils/tracking"
|
||||
import { useTrackingContext } from "../../trackingContext"
|
||||
|
||||
import styles from "./sidePeekAccordion.module.css"
|
||||
|
||||
import type { ParkingAccordionItemProps } from "@/types/components/sidePeeks/amenities"
|
||||
import type { Parking } from "@scandic-hotels/trpc/types/hotel"
|
||||
|
||||
interface ParkingAccordionItemProps {
|
||||
parkingPageHref?: string | null
|
||||
parking: Parking[]
|
||||
elevatorPitch?: string
|
||||
}
|
||||
|
||||
export default function ParkingAccordionItem({
|
||||
parking,
|
||||
@@ -20,6 +26,7 @@ export default function ParkingAccordionItem({
|
||||
parkingPageHref,
|
||||
}: ParkingAccordionItemProps) {
|
||||
const intl = useIntl()
|
||||
const tracking = useTrackingContext()
|
||||
|
||||
if (!parking.length && !elevatorPitch && !parkingPageHref) {
|
||||
return null
|
||||
@@ -33,7 +40,7 @@ export default function ParkingAccordionItem({
|
||||
iconName={IconName.Parking}
|
||||
variant="sidepeek"
|
||||
className={styles.accordionItem}
|
||||
onOpen={() => trackAccordionClick("amenities:parking")}
|
||||
onOpen={() => tracking.trackAccordionItemOpen("amenities:parking")}
|
||||
>
|
||||
<div className={styles.parkingContent}>
|
||||
{elevatorPitch ? (
|
||||
@@ -0,0 +1,26 @@
|
||||
.accordionItem {
|
||||
color: var(--Text-Default);
|
||||
}
|
||||
|
||||
.parkingContent,
|
||||
.accessibilityContent {
|
||||
display: grid;
|
||||
gap: var(--Space-x3);
|
||||
}
|
||||
|
||||
.checkInCheckOutContent {
|
||||
display: grid;
|
||||
gap: var(--Space-x15);
|
||||
}
|
||||
|
||||
.checkInCheckOutContent {
|
||||
display: grid;
|
||||
padding: var(--Space-x2) var(--Space-x3);
|
||||
gap: var(--Space-x1);
|
||||
border-radius: var(--Corner-radius-md);
|
||||
background: var(--Surface-Secondary-Default);
|
||||
}
|
||||
|
||||
.subheading {
|
||||
color: var(--Text-Secondary);
|
||||
}
|
||||
305
packages/booking-flow/lib/components/TEMP/FacilityToIcon.tsx
Normal file
305
packages/booking-flow/lib/components/TEMP/FacilityToIcon.tsx
Normal file
@@ -0,0 +1,305 @@
|
||||
import { IconByIconName } from "@scandic-hotels/design-system/Icons/IconByIconName"
|
||||
import { IconName } from "@scandic-hotels/design-system/Icons/iconName"
|
||||
import { FacilityEnum } from "@scandic-hotels/trpc/enums/facilities"
|
||||
|
||||
import type {
|
||||
IconProps,
|
||||
NucleoIconProps,
|
||||
} from "@scandic-hotels/design-system/Icons"
|
||||
import type { MaterialIconSetIconProps } from "@scandic-hotels/design-system/Icons/MaterialIcon"
|
||||
import type { JSX } from "react"
|
||||
|
||||
const facilityToIconMap: Record<FacilityEnum, IconName> = {
|
||||
[FacilityEnum.AccessibleBathingControls]: IconName.StarFilled,
|
||||
[FacilityEnum.AccessibleBathtubs]: IconName.StarFilled,
|
||||
[FacilityEnum.AccessibleElevators]: IconName.StarFilled,
|
||||
[FacilityEnum.AccessibleLightSwitch]: IconName.StarFilled,
|
||||
[FacilityEnum.AccessibleRoomsAtHotel1]: IconName.StarFilled,
|
||||
[FacilityEnum.AccessibleRoomsAtHotel2]: IconName.StarFilled,
|
||||
[FacilityEnum.AccessibleToilets]: IconName.StarFilled,
|
||||
[FacilityEnum.AccessibleWashBasins]: IconName.StarFilled,
|
||||
[FacilityEnum.AdaptedRoomDoors]: IconName.StarFilled,
|
||||
[FacilityEnum.AdjoiningConventionCentre]: IconName.ConventionCentre,
|
||||
[FacilityEnum.AirConAirCooling]: IconName.AirConAirCooling,
|
||||
[FacilityEnum.AirConditioningInRoom]: IconName.AirConditioningInRoom,
|
||||
[FacilityEnum.AirportMaxDistance8Km]: IconName.Airplane,
|
||||
[FacilityEnum.AlarmsContinuouslyMonitored]: IconName.StarFilled,
|
||||
[FacilityEnum.AlarmsHaveStrobeLightsForDeafHardHearingInAllGuestRooms]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.AlarmsHaveStrobeLightsForDeafHardHearingInAllHallways]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.AlarmsHaveStrobeLightsForDeafHardHearingInAllPublicAreas]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.AllAudibleSmokeAlarmsHardwired]: IconName.StarFilled,
|
||||
[FacilityEnum.AllExteriorDoorsRequireKeyAccessAtNightOrAutomaticallyLock]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.AllGuestRoomDoorsHaveViewports]: IconName.StarFilled,
|
||||
[FacilityEnum.AllGuestRoomDoorsSelfClosing]: IconName.StarFilled,
|
||||
[FacilityEnum.AllParkingAreasPatrolled]: IconName.StarFilled,
|
||||
[FacilityEnum.AllParkingAreasWellLit]: IconName.StarFilled,
|
||||
[FacilityEnum.AllStairsWellsVentilated]: IconName.StarFilled,
|
||||
[FacilityEnum.ArmchairBed]: IconName.ArmChair,
|
||||
[FacilityEnum.AudibleAlarms]: IconName.StarFilled,
|
||||
[FacilityEnum.AudibleSmokeAlarmsInAllHalls]: IconName.StarFilled,
|
||||
[FacilityEnum.AudibleSmokeAlarmsInAllPublicAreas]: IconName.StarFilled,
|
||||
[FacilityEnum.AudibleSmokeAlarmsInAllRooms]: IconName.StarFilled,
|
||||
[FacilityEnum.AudioVisualEquipmentAvailable]: IconName.StarFilled,
|
||||
[FacilityEnum.AutolinkFireDepartment]: IconName.StarFilled,
|
||||
[FacilityEnum.AutomatedExternalDefibrillatorOnSiteAED]: IconName.StarFilled,
|
||||
[FacilityEnum.AutomaticFireDoors]: IconName.StarFilled,
|
||||
[FacilityEnum.AutoRecallElevators]: IconName.StarFilled,
|
||||
[FacilityEnum.BalconiesAccessibleToAdjoiningRooms]: IconName.StarFilled,
|
||||
[FacilityEnum.Ballroom]: IconName.StarFilled,
|
||||
[FacilityEnum.Banquet]: IconName.StarFilled,
|
||||
[FacilityEnum.Bar]: IconName.LocalBar,
|
||||
[FacilityEnum.BasicMedicalEquipmentOnSite]: IconName.StarFilled,
|
||||
[FacilityEnum.BathroomsAdaptedForDisabledGuests]: IconName.StarFilled,
|
||||
[FacilityEnum.Beach]: IconName.Beach,
|
||||
[FacilityEnum.Beach0To1Km]: IconName.Beach,
|
||||
[FacilityEnum.BeautySalon]: IconName.BeautySalon,
|
||||
[FacilityEnum.BedroomsWithWheelchairAccess]: IconName.StarFilled,
|
||||
[FacilityEnum.BikesForLoan]: IconName.Bike,
|
||||
[FacilityEnum.Bowling]: IconName.Bowling,
|
||||
[FacilityEnum.BrailleLargePrintHotelLiterature]: IconName.StarFilled,
|
||||
[FacilityEnum.BrailleLargePrintMenus]: IconName.StarFilled,
|
||||
[FacilityEnum.Breakfast]: IconName.Breakfast,
|
||||
[FacilityEnum.Business1]: IconName.BusinessCentre,
|
||||
[FacilityEnum.Business2]: IconName.BusinessCentre,
|
||||
[FacilityEnum.BusinessCentre]: IconName.BusinessCentre,
|
||||
[FacilityEnum.Cafe]: IconName.Restaurant,
|
||||
[FacilityEnum.CashFree8pmTill6am]: IconName.CashFree,
|
||||
[FacilityEnum.CashFreeHotel]: IconName.CashFree,
|
||||
[FacilityEnum.ChildrenWelcome]: IconName.StarFilled,
|
||||
[FacilityEnum.City]: IconName.City,
|
||||
[FacilityEnum.CoffeeInReceptionAtCharge]: IconName.CoffeeInReceptionAtCharge,
|
||||
[FacilityEnum.CoffeeShop]: IconName.CoffeeShop,
|
||||
[FacilityEnum.CoffeeTeaFacilities]: IconName.CoffeeAlt,
|
||||
[FacilityEnum.ColourTVInRoomsAllScandicHotels]: IconName.StarFilled,
|
||||
[FacilityEnum.ComplimentaryColdRefreshments]:
|
||||
IconName.ComplimentaryColdRefreshments,
|
||||
[FacilityEnum.CongressHall]: IconName.StarFilled,
|
||||
[FacilityEnum.ConventionCentre]: IconName.ConventionCentre,
|
||||
[FacilityEnum.Couples]: IconName.StarFilled,
|
||||
[FacilityEnum.DeadboltsOnConnectingDoors]: IconName.StarFilled,
|
||||
[FacilityEnum.DeadboltsSecondaryLocksOnAllGuestRoomDoors]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.Defibrillator]: IconName.StarFilled,
|
||||
[FacilityEnum.Desk]: IconName.Desk,
|
||||
[FacilityEnum.DirectDialPhoneInRoomsAllScandic]: IconName.DirectDial,
|
||||
[FacilityEnum.DisabledEmergencyPlan1]: IconName.StarFilled,
|
||||
[FacilityEnum.DisabledEmergencyPlan2]: IconName.StarFilled,
|
||||
[FacilityEnum.DisabledParking]: IconName.Wheelchair,
|
||||
[FacilityEnum.DiscoNightClub]: IconName.Nightlife,
|
||||
[FacilityEnum.DJLiveMusic]: IconName.Nightlife,
|
||||
[FacilityEnum.DO_NOT_USE_Restaurant]: IconName.StarFilled,
|
||||
[FacilityEnum.Downtown]: IconName.StarFilled,
|
||||
[FacilityEnum.DrinkableTapWater]: IconName.StarFilled,
|
||||
[FacilityEnum.DVDPlayer]: IconName.StarFilled,
|
||||
[FacilityEnum.EBikesChargingStation]: IconName.ElectricBike,
|
||||
[FacilityEnum.ElectronicKeyCards]: IconName.StarFilled,
|
||||
[FacilityEnum.Elevator]: IconName.Elevator,
|
||||
[FacilityEnum.EmergencyBackUpGenerators]: IconName.StarFilled,
|
||||
[FacilityEnum.EmergencyCallButtonOnPhone]: IconName.StarFilled,
|
||||
[FacilityEnum.EmergencyCodesOrButtonsInRooms]: IconName.StarFilled,
|
||||
[FacilityEnum.EmergencyEvacuationPlan1]: IconName.StarFilled,
|
||||
[FacilityEnum.EmergencyEvacuationPlan2]: IconName.StarFilled,
|
||||
[FacilityEnum.EmergencyEvaluationDrillFrequency]: IconName.StarFilled,
|
||||
[FacilityEnum.EmergencyInfoInAllRooms]: IconName.StarFilled,
|
||||
[FacilityEnum.EmergencyLightingAllScandic]: IconName.StarFilled,
|
||||
[FacilityEnum.EmergencyLightningInAllPublicAreas]: IconName.StarFilled,
|
||||
[FacilityEnum.EmergencyServiceResponseTimeInMinutes]: IconName.StarFilled,
|
||||
[FacilityEnum.Entertainment]: IconName.Theatre,
|
||||
[FacilityEnum.EventVenue]: IconName.StarFilled,
|
||||
[FacilityEnum.ExchangeFacility]: IconName.StarFilled,
|
||||
[FacilityEnum.ExitMapsInRooms]: IconName.StarFilled,
|
||||
[FacilityEnum.ExitSignsLit]: IconName.StarFilled,
|
||||
[FacilityEnum.ExtraFamilyFriendly]: IconName.ExtraFamilyFriendly,
|
||||
[FacilityEnum.Families]: IconName.ExtraFamilyFriendly,
|
||||
[FacilityEnum.FaxFacilityInRoom]: IconName.Fax,
|
||||
[FacilityEnum.Financial]: IconName.StarFilled,
|
||||
[FacilityEnum.FireDetectorsAllScandic]: IconName.StarFilled,
|
||||
[FacilityEnum.FireDetectorsInAllHalls]: IconName.StarFilled,
|
||||
[FacilityEnum.FireDetectorsInAllPublicAreas]: IconName.StarFilled,
|
||||
[FacilityEnum.FireDetectorsInAllRooms]: IconName.StarFilled,
|
||||
[FacilityEnum.FireExtinguishersInAllPublicAreas]: IconName.StarFilled,
|
||||
[FacilityEnum.FireExtinguishersInPublicAreasAllScandic]: IconName.StarFilled,
|
||||
[FacilityEnum.FireSafetyAllScandic]: IconName.StarFilled,
|
||||
[FacilityEnum.FirstAidAvailable]: IconName.StarFilled,
|
||||
[FacilityEnum.FoodDrinks247]: IconName.FoodDrinks247,
|
||||
[FacilityEnum.FreeWiFi]: IconName.Wifi,
|
||||
[FacilityEnum.GiftShop]: IconName.Gift,
|
||||
[FacilityEnum.Golf]: IconName.Golf,
|
||||
[FacilityEnum.GolfCourse0To30Km]: IconName.Golf,
|
||||
[FacilityEnum.GuestRoomDoorsHaveASecondLock]: IconName.StarFilled,
|
||||
[FacilityEnum.Gym]: IconName.Fitness,
|
||||
[FacilityEnum.GymTrainingFacilities]: IconName.Fitness,
|
||||
[FacilityEnum.Hairdresser]: IconName.Hairdresser,
|
||||
[FacilityEnum.HairdryerInRoomAllScandic]: IconName.HairdryerInRoomAllScandic,
|
||||
[FacilityEnum.HandicapFacilities]: IconName.StarFilled,
|
||||
[FacilityEnum.HandrailsInBathrooms]: IconName.StarFilled,
|
||||
[FacilityEnum.HearingInductionLoops]: IconName.StarFilled,
|
||||
[FacilityEnum.Highway1]: IconName.StarFilled,
|
||||
[FacilityEnum.Highway2]: IconName.StarFilled,
|
||||
[FacilityEnum.Hiking0To3Km]: IconName.Hiking,
|
||||
[FacilityEnum.HotelCompliesWithAAASecurityStandards]: IconName.StarFilled,
|
||||
[FacilityEnum.HotelIsFollowingScandicsSafetySecurityPolicy]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.HotelWorksAccordingToScandicsAccessibilityConcepts]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.IceMachine]: IconName.IceMachine,
|
||||
[FacilityEnum.IceMachineReception]: IconName.IceMachine,
|
||||
[FacilityEnum.IDRequiredToReplaceAGuestRoomKey]: IconName.StarFilled,
|
||||
[FacilityEnum.IfNoWhatAreTheHoursUse24ClockEx0000To0600]: IconName.StarFilled,
|
||||
[FacilityEnum.InCountry]: IconName.StarFilled,
|
||||
[FacilityEnum.IndustrialPark]: IconName.StarFilled,
|
||||
[FacilityEnum.InternetHighSpeedInternetConnectionAllScandic]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.InternetHotSpotsAllScandic]: IconName.StarFilled,
|
||||
[FacilityEnum.IroningRoom]: IconName.Ironing,
|
||||
[FacilityEnum.IronIroningBoardAllScandic]: IconName.Ironing,
|
||||
[FacilityEnum.Jacuzzi]: IconName.Jacuzzi,
|
||||
[FacilityEnum.JacuzziInRoom]: IconName.Jacuzzi,
|
||||
[FacilityEnum.KayaksForLoan]: IconName.Kayaking,
|
||||
[FacilityEnum.KeyAccessOnlySecuredFloorsAvailable]: IconName.StarFilled,
|
||||
[FacilityEnum.KeyAccessOnlyToHealthClubGym]: IconName.Fitness,
|
||||
[FacilityEnum.KidsPlayRoom]: IconName.StarFilled,
|
||||
[FacilityEnum.KidsUpToAndIncluding12YearsStayForFree]: IconName.StarFilled,
|
||||
[FacilityEnum.KitchenInRoom]: IconName.Kitchen,
|
||||
[FacilityEnum.Lake0To1Km]: IconName.Houseboat,
|
||||
[FacilityEnum.LakeOrSea0To1Km]: IconName.Houseboat,
|
||||
[FacilityEnum.LaptopSafe]: IconName.LaptopSafe,
|
||||
[FacilityEnum.LateCheckOutUntil1400Guaranteed]: IconName.Business,
|
||||
[FacilityEnum.LaundryRoom]: IconName.LaundryMachine,
|
||||
[FacilityEnum.LaundryService]: IconName.LaundryMachine,
|
||||
[FacilityEnum.LaundryServiceExpress]: IconName.TshirtWash,
|
||||
[FacilityEnum.Leisure]: IconName.StarFilled,
|
||||
[FacilityEnum.LifestyleConcierge]: IconName.Concierge,
|
||||
[FacilityEnum.LuggageLockers]: IconName.LuggageLockers,
|
||||
[FacilityEnum.LuggageStorageAdditionalCost]: IconName.Luggage,
|
||||
[FacilityEnum.LuggageStorageNoCost]: IconName.Luggage,
|
||||
[FacilityEnum.Massage]: IconName.Massage,
|
||||
[FacilityEnum.MeetingArea]: IconName.Business,
|
||||
[FacilityEnum.MeetingConferenceFacilities]: IconName.Business,
|
||||
[FacilityEnum.MeetingRooms]: IconName.Business,
|
||||
[FacilityEnum.MinibarInRoom]: IconName.Minibar,
|
||||
[FacilityEnum.MobileLift]: IconName.StarFilled,
|
||||
[FacilityEnum.Mountains0To1Km]: IconName.Landscape,
|
||||
[FacilityEnum.MovieChannelsInRoomAllScandic]: IconName.TVRemote,
|
||||
[FacilityEnum.MultipleExitsOnEachFloor]: IconName.StarFilled,
|
||||
[FacilityEnum.NonSmokingRoomsAllScandic]: IconName.NonSmoking,
|
||||
[FacilityEnum.OnSiteTrainingFacilities]: IconName.Fitness,
|
||||
[FacilityEnum.OtherExplainInBriefDescription]: IconName.StarFilled,
|
||||
[FacilityEnum.OutdoorTerrace]: IconName.Deck,
|
||||
[FacilityEnum.OvernightSecurity]: IconName.Guard,
|
||||
[FacilityEnum.ParkingAdditionalCost]: IconName.Parking,
|
||||
[FacilityEnum.ParkingAttendant]: IconName.StarFilled,
|
||||
[FacilityEnum.ParkingElectricCharging]: IconName.ElectricCar,
|
||||
[FacilityEnum.ParkingFreeParking]: IconName.Parking,
|
||||
[FacilityEnum.ParkingGarage]: IconName.Garage,
|
||||
[FacilityEnum.ParkingOutdoor]: IconName.ParkingOutdoor,
|
||||
[FacilityEnum.PCHookUpInRoom]: IconName.StarFilled,
|
||||
[FacilityEnum.PetFriendlyRooms]: IconName.Pets,
|
||||
[FacilityEnum.PillowAlarmsAvailable]: IconName.StarFilled,
|
||||
[FacilityEnum.PlayStationInPlayArea]: IconName.Gaming,
|
||||
[FacilityEnum.Pool]: IconName.Swim,
|
||||
[FacilityEnum.PoolSwimmingPoolJacuzziAtHotel]: IconName.Swim,
|
||||
[FacilityEnum.PrintingService]: IconName.StarFilled,
|
||||
[FacilityEnum.PropertyMeetsRequirementsFireSafety]: IconName.StarFilled,
|
||||
[FacilityEnum.PublicAddressSystem]: IconName.StarFilled,
|
||||
[FacilityEnum.RelaxationSuite]: IconName.StarFilled,
|
||||
[FacilityEnum.Restaurant]: IconName.Restaurant,
|
||||
[FacilityEnum.RestrictedRoomAccessAllScandic]: IconName.StarFilled,
|
||||
[FacilityEnum.RooftopBar]: IconName.Deck,
|
||||
[FacilityEnum.RoomsAccessibleFromTheInterior]: IconName.StarFilled,
|
||||
[FacilityEnum.RoomService]: IconName.RoomService,
|
||||
[FacilityEnum.RoomWindowsOpen]: IconName.StarFilled,
|
||||
[FacilityEnum.RoomWindowsThatOpenHaveLockingDevice]: IconName.StarFilled,
|
||||
[FacilityEnum.Rural1]: IconName.StarFilled,
|
||||
[FacilityEnum.Rural2]: IconName.StarFilled,
|
||||
[FacilityEnum.SafeDepositBoxInRoomsAllScandic]: IconName.SafetyBox,
|
||||
[FacilityEnum.SafeDepositBoxInRoomsCanHoldA17InchLaptop]: IconName.SafetyBox,
|
||||
[FacilityEnum.SafeDepositBoxInRoomsCannotHoldALaptop]: IconName.SafetyBox,
|
||||
[FacilityEnum.SafetyChainsOnGuestRoomDoor]: IconName.StarFilled,
|
||||
[FacilityEnum.Sauna]: IconName.Sauna,
|
||||
[FacilityEnum.ScandicShop24Hrs]: IconName.ConvenienceStore24h,
|
||||
[FacilityEnum.SecondaryLocksOnSlidingGlassDoors]: IconName.StarFilled,
|
||||
[FacilityEnum.SecondaryLocksOnWindows]: IconName.StarFilled,
|
||||
[FacilityEnum.Security24Hours]: IconName.Guard,
|
||||
[FacilityEnum.SecurityEscortsAvailableOnRequest]: IconName.Guard,
|
||||
[FacilityEnum.SecurityPersonnelOnSite]: IconName.Guard,
|
||||
[FacilityEnum.SeparateFloorsForWomen]: IconName.StarFilled,
|
||||
[FacilityEnum.ServesBreakfastAlwaysIncluded]: IconName.Breakfast,
|
||||
[FacilityEnum.ServesBreakfastNotAlwaysIncluded]: IconName.Breakfast,
|
||||
[FacilityEnum.ServesOrganicBreakfastAlwaysIncluded]: IconName.Breakfast,
|
||||
[FacilityEnum.ServesOrganicBreakfastNotAlwaysIncluded]: IconName.Breakfast,
|
||||
[FacilityEnum.ServiceGuideDogsAllowed]: IconName.StarFilled,
|
||||
[FacilityEnum.ServiceSecurity24Hrs]: IconName.Guard,
|
||||
[FacilityEnum.Shopping]: IconName.Shopping,
|
||||
[FacilityEnum.SkateboardsForLoan]: IconName.Skateboarding,
|
||||
[FacilityEnum.Skiing0To1Km]: IconName.Skiing,
|
||||
[FacilityEnum.Skybar]: IconName.LocalBar,
|
||||
[FacilityEnum.SmokeDetectorsAllScandic]: IconName.StarFilled,
|
||||
[FacilityEnum.Solarium]: IconName.StarFilled,
|
||||
[FacilityEnum.SpecialNeedsMenus]: IconName.StarFilled,
|
||||
[FacilityEnum.Sports]: IconName.Sports,
|
||||
[FacilityEnum.SprinklersAllScandic]: IconName.StarFilled,
|
||||
[FacilityEnum.SprinklersInAllHalls]: IconName.StarFilled,
|
||||
[FacilityEnum.SprinklersInAllPublicAreas]: IconName.StarFilled,
|
||||
[FacilityEnum.SprinklersInAllRooms]: IconName.StarFilled,
|
||||
[FacilityEnum.StaffInDuplicateKeys]: IconName.StarFilled,
|
||||
[FacilityEnum.StaffRedCrossCertifiedInCPR]: IconName.StarFilled,
|
||||
[FacilityEnum.StaffTrainedForDisabledGuests]: IconName.StarFilled,
|
||||
[FacilityEnum.StaffTrainedInAutomatedExternalDefibrillatorUsageAED]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.StaffTrainedInCPR]: IconName.StarFilled,
|
||||
[FacilityEnum.StaffTrainedInFirstAid]: IconName.StarFilled,
|
||||
[FacilityEnum.StaffTrainedInFirstAidTechniques]: IconName.StarFilled,
|
||||
[FacilityEnum.StaffTrainedToCaterForDisabledGuestsAllScandic]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.Suburbs]: IconName.StarFilled,
|
||||
[FacilityEnum.SwingboltLock]: IconName.StarFilled,
|
||||
[FacilityEnum.TeleConferencingFacilitiesAvailable]: IconName.StarFilled,
|
||||
[FacilityEnum.TelevisionsWithSubtitlesOrClosedCaptions]: IconName.StarFilled,
|
||||
[FacilityEnum.Tennis1]: IconName.Sports,
|
||||
[FacilityEnum.Tennis2]: IconName.Sports,
|
||||
[FacilityEnum.TennisPadel]: IconName.Sports,
|
||||
[FacilityEnum.Theatre]: IconName.Theatre,
|
||||
[FacilityEnum.TrouserPress]: IconName.Ironing,
|
||||
[FacilityEnum.TVWithChromecast1]: IconName.TvCasting,
|
||||
[FacilityEnum.TVWithChromecast2]: IconName.TvCasting,
|
||||
[FacilityEnum.UniformSecurityOnPremises]: IconName.StarFilled,
|
||||
[FacilityEnum.UtilityRoomForIroning]: IconName.Ironing,
|
||||
[FacilityEnum.VendingMachineWithNecessities]: IconName.Dining,
|
||||
[FacilityEnum.VideoSurveillanceInHallways]: IconName.StarFilled,
|
||||
[FacilityEnum.VideoSurveillanceInPublicAreas]: IconName.StarFilled,
|
||||
[FacilityEnum.VideoSurveillanceMonitored24HrsADay]: IconName.StarFilled,
|
||||
[FacilityEnum.VideoSurveillanceOfAllParkingAreas]: IconName.StarFilled,
|
||||
[FacilityEnum.VideoSurveillanceOfExteriorFrontEntrance]: IconName.StarFilled,
|
||||
[FacilityEnum.VideoSurveillanceRecorded24HrsADayParkingArea]:
|
||||
IconName.StarFilled,
|
||||
[FacilityEnum.WallMountedCycleRack]: IconName.Bike,
|
||||
[FacilityEnum.WellLitWalkways]: IconName.StarFilled,
|
||||
[FacilityEnum.WellnessAndSaunaEntranceFeeAdmission16PlusYears]: IconName.Spa,
|
||||
[FacilityEnum.WellnessPoolSaunaEntranceFeeAdmission16PlusYears]: IconName.Spa,
|
||||
[FacilityEnum.WheelchairAccess]: IconName.Wheelchair,
|
||||
[FacilityEnum.WideCorridors]: IconName.StarFilled,
|
||||
[FacilityEnum.WideEntrance]: IconName.StarFilled,
|
||||
[FacilityEnum.WideRestaurantEntrance]: IconName.StarFilled,
|
||||
[FacilityEnum.WiFiWirelessInternetAccessAllScandic]: IconName.StarFilled,
|
||||
}
|
||||
|
||||
interface mapFacilityToIconProps {
|
||||
id: FacilityEnum
|
||||
}
|
||||
export function FacilityToIcon({
|
||||
id,
|
||||
...props
|
||||
}: mapFacilityToIconProps &
|
||||
(
|
||||
| MaterialIconSetIconProps
|
||||
| NucleoIconProps
|
||||
| IconProps
|
||||
)): JSX.Element | null {
|
||||
const iconName = facilityToIconMap[id]
|
||||
return <IconByIconName iconName={iconName} {...props} />
|
||||
}
|
||||
35
packages/booking-flow/lib/misc/bedTypeIcons.ts
Normal file
35
packages/booking-flow/lib/misc/bedTypeIcons.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import BedBunkExtraIcon from "@scandic-hotels/design-system/Icons/BedBunkExtraIcon"
|
||||
import BedGenericIcon from "@scandic-hotels/design-system/Icons/BedGenericIcon"
|
||||
import BedKingIcon from "@scandic-hotels/design-system/Icons/BedKingIcon"
|
||||
import BedPullOutExtraIcon from "@scandic-hotels/design-system/Icons/BedPullOutExtraIcon"
|
||||
import BedQueenIcon from "@scandic-hotels/design-system/Icons/BedQueenIcon"
|
||||
import BedSingleIcon from "@scandic-hotels/design-system/Icons/BedSingleIcon"
|
||||
import BedSofaExtraIcon from "@scandic-hotels/design-system/Icons/BedSofaExtraIcon"
|
||||
import BedTwinIcon from "@scandic-hotels/design-system/Icons/BedTwinIcon"
|
||||
import BedWallExtraIcon from "@scandic-hotels/design-system/Icons/BedWallExtraIcon"
|
||||
|
||||
import type { IconProps } from "@scandic-hotels/design-system/Icons"
|
||||
import type {
|
||||
BedTypeEnum,
|
||||
ExtraBedTypeEnum,
|
||||
} from "@scandic-hotels/trpc/enums/bedType"
|
||||
import type { JSX } from "react"
|
||||
|
||||
export type BedTypes = keyof typeof BedTypeEnum | keyof typeof ExtraBedTypeEnum
|
||||
|
||||
export const BED_TYPE_ICONS: Record<
|
||||
BedTypes,
|
||||
(props: IconProps) => JSX.Element
|
||||
> = {
|
||||
King: BedKingIcon,
|
||||
Queen: BedQueenIcon,
|
||||
Single: BedSingleIcon,
|
||||
Twin: BedTwinIcon,
|
||||
CustomOccupancy: BedGenericIcon,
|
||||
|
||||
SofaBed: BedSofaExtraIcon,
|
||||
WallBed: BedWallExtraIcon,
|
||||
BunkBed: BedBunkExtraIcon,
|
||||
PullOutBed: BedPullOutExtraIcon,
|
||||
Other: BedGenericIcon,
|
||||
}
|
||||
@@ -1,30 +1,28 @@
|
||||
import { create } from "zustand"
|
||||
|
||||
import { trackOpenSidePeekEvent } from "@/utils/tracking"
|
||||
|
||||
import type { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||
import type { SafeUser } from "@/types/user"
|
||||
export enum SidePeekEnum {
|
||||
hotelDetails = "hotel-detail-side-peek",
|
||||
roomDetails = "room-detail-side-peek",
|
||||
bookedRoomDetails = "booked-room-detail-side-peek",
|
||||
}
|
||||
|
||||
interface SidePeekState {
|
||||
activeSidePeek: SidePeekEnum | null
|
||||
hotelId: string | null
|
||||
roomTypeCode: string | null
|
||||
showCTA: boolean
|
||||
user: SafeUser
|
||||
confirmationNumber: string
|
||||
openSidePeek: ({
|
||||
key,
|
||||
hotelId,
|
||||
roomTypeCode,
|
||||
showCTA,
|
||||
user,
|
||||
confirmationNumber,
|
||||
}: {
|
||||
key: SidePeekEnum | null
|
||||
hotelId: string
|
||||
roomTypeCode?: string
|
||||
showCTA?: boolean
|
||||
user?: SafeUser
|
||||
confirmationNumber?: string
|
||||
}) => void
|
||||
closeSidePeek: () => void
|
||||
@@ -42,16 +40,13 @@ const useSidePeekStore = create<SidePeekState>((set) => ({
|
||||
hotelId,
|
||||
roomTypeCode,
|
||||
showCTA,
|
||||
user,
|
||||
confirmationNumber,
|
||||
}) => {
|
||||
trackOpenSidePeekEvent(key, hotelId, window.location.pathname, roomTypeCode)
|
||||
set({
|
||||
activeSidePeek: key,
|
||||
hotelId,
|
||||
roomTypeCode,
|
||||
showCTA,
|
||||
user,
|
||||
confirmationNumber,
|
||||
})
|
||||
},
|
||||
@@ -7,6 +7,7 @@ export type TrackingFunctions = {
|
||||
searchTerm: string,
|
||||
searchType: "hotel" | "destination"
|
||||
) => void
|
||||
trackAccordionItemOpen: (option: string) => void
|
||||
}
|
||||
|
||||
export const TrackingContext = createContext<TrackingFunctions | undefined>(
|
||||
|
||||
@@ -20,8 +20,16 @@
|
||||
"./utils/url": "./lib/utils/url.ts",
|
||||
"./hooks/useSearchHistory": "./lib/hooks/useSearchHistory.ts",
|
||||
"./searchType": "./lib/misc/searchType.ts",
|
||||
"./bedTypeIcons": "./lib/misc/bedTypeIcons.ts",
|
||||
"./stores/bookingCode-filter": "./lib/stores/bookingCode-filter.ts",
|
||||
"./components/TripAdvisorChip": "./lib/components/TripAdvisorChip/index.tsx"
|
||||
"./stores/sidepeek": "./lib/stores/sidepeek.ts",
|
||||
"./components/TripAdvisorChip": "./lib/components/TripAdvisorChip/index.tsx",
|
||||
"./components/AdditionalAmenities": "./lib/components/AdditionalAmenities/index.tsx",
|
||||
"./components/HotelReservationSidePeek": "./lib/components/HotelReservationSidePeek/index.tsx",
|
||||
"./components/RoomSidePeekContent": "./lib/components/RoomSidePeek/RoomSidePeekContent/index.tsx",
|
||||
"./components/SidePeekAccordions/BreakfastAccordionItem": "./lib/components/SidePeekAccordions/BreakfastAccordionItem.tsx",
|
||||
"./components/SidePeekAccordions/CheckInCheckOutAccordionItem": "./lib/components/SidePeekAccordions/CheckInCheckOutAccordionItem.tsx",
|
||||
"./components/SidePeekAccordions/ParkingAccordionItem": "./lib/components/SidePeekAccordions/ParkingAccordionItem.tsx"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hookform/resolvers": "^5.0.1",
|
||||
|
||||
@@ -5,10 +5,7 @@
|
||||
{
|
||||
"name": "next"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"@/*": ["./*"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
||||
"exclude": ["**/node_modules/**"]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { setProjectAnnotations } from '@storybook/react-vite'
|
||||
import * as previewAnnotations from './preview'
|
||||
|
||||
const annotations = setProjectAnnotations([previewAnnotations])
|
||||
setProjectAnnotations([previewAnnotations])
|
||||
|
||||
234
packages/design-system/lib/components/Icons/FacilityIcon.tsx
Normal file
234
packages/design-system/lib/components/Icons/FacilityIcon.tsx
Normal file
@@ -0,0 +1,234 @@
|
||||
import BathroomCabinetIcon from './Nucleo/Amenities_Facilities/bathroom-cabinet-2'
|
||||
import BedHotelIcon from './Customised/Amenities_Facilities/BedHotel'
|
||||
import BowlingPinsIcon from './Nucleo/Experiences/bowling-pins'
|
||||
import BunkBedIcon from './Customised/Amenities_Facilities/MdiBunkBedOutline'
|
||||
import ConferenceRoomIcon from './Nucleo/Amenities_Facilities/conference-room'
|
||||
import CoolingIcon from './Customised/Amenities_Facilities/Cooling'
|
||||
import CouchTableIcon from './Customised/Amenities_Facilities/CouchTable'
|
||||
import DoorIcon from './Nucleo/Amenities_Facilities/door-2'
|
||||
import FootStoolIcon from './Customised/Amenities_Facilities/FootStool'
|
||||
import HairdresserIcon from './Nucleo/Amenities_Facilities/hairdresser-1'
|
||||
import HairdryerIcon from './Customised/Amenities_Facilities/Hairdryer'
|
||||
import HandSoapIcon from './Customised/Amenities_Facilities/HandSoap'
|
||||
import IceMachineIcon from './Customised/Amenities_Facilities/IceMachine'
|
||||
import MassageIcon from './Customised/Amenities_Facilities/Massage'
|
||||
import { MaterialIcon, type MaterialIconSetIconProps } from './MaterialIcon'
|
||||
import MirrorIcon from './Customised/Amenities_Facilities/Mirror'
|
||||
import MovingBedsIcon from './Customised/Amenities_Facilities/MovingBeds'
|
||||
import RecordPlayerIcon from './Nucleo/Amenities_Facilities/record-player-3'
|
||||
import RoadIcon from './Customised/Amenities_Facilities/Road'
|
||||
import RugIcon from './Customised/Amenities_Facilities/Rug'
|
||||
import SafetyBoxIcon from './Customised/Amenities_Facilities/SafetyBox'
|
||||
import SlippersIcon from './Customised/Amenities_Facilities/Slippers'
|
||||
import ToiletIcon from './Nucleo/Amenities_Facilities/toilet-2'
|
||||
import TowelIcon from './Customised/Amenities_Facilities/Towel'
|
||||
import UserPoliceIcon from './Nucleo/Amenities_Facilities/user-police-2'
|
||||
import ViewIcon from './Customised/Amenities_Facilities/View'
|
||||
import WardIcon from './Customised/Amenities_Facilities/Ward'
|
||||
import WindowNotAvailableIcon from './Customised/Amenities_Facilities/WindowNotAvailable'
|
||||
import WoodFloorIcon from './Customised/Amenities_Facilities/WoodFloor'
|
||||
|
||||
import type { IconProps, NucleoIconProps } from '.'
|
||||
import type { MaterialSymbolProps } from './MaterialIcon/MaterialSymbol'
|
||||
import type { JSX } from 'react'
|
||||
|
||||
interface FacilityIconProps {
|
||||
name: string | undefined
|
||||
}
|
||||
export function FacilityIcon({
|
||||
name,
|
||||
...props
|
||||
}:
|
||||
| (FacilityIconProps & MaterialIconSetIconProps)
|
||||
| NucleoIconProps
|
||||
| IconProps): JSX.Element {
|
||||
if (!name) {
|
||||
return <MaterialIcon icon="favorite" {...props} />
|
||||
}
|
||||
|
||||
const normalizedName = name.toLowerCase()
|
||||
|
||||
const customIcon = CustomIconMappings.find(
|
||||
(icon) => icon.name.toLowerCase() === normalizedName
|
||||
)
|
||||
if (customIcon) {
|
||||
return <customIcon.icon {...props} />
|
||||
}
|
||||
|
||||
const materialSymbolIcon = MaterialIconMappings.find(
|
||||
(icon) => icon.name.toLowerCase() === normalizedName
|
||||
)
|
||||
|
||||
return materialSymbolIcon ? (
|
||||
<MaterialIcon icon={materialSymbolIcon.icon} {...props} />
|
||||
) : (
|
||||
<MaterialIcon icon="favorite" {...props} />
|
||||
)
|
||||
}
|
||||
|
||||
const MaterialIconMappings: {
|
||||
icon: MaterialSymbolProps['icon']
|
||||
name: string
|
||||
}[] = [
|
||||
{ icon: 'air_purifier_gen', name: 'aircondition' },
|
||||
{ icon: 'travel', name: 'airport' },
|
||||
{ icon: 'balcony', name: 'balcony' },
|
||||
{ icon: 'deck', name: 'balconyorterrace' },
|
||||
{ icon: 'balcony', name: 'frenchbalcony' },
|
||||
{ icon: 'bathtub', name: 'bathroomwithbathtub' },
|
||||
{ icon: 'bathtub', name: 'bathroomwithshowerandbathtub' },
|
||||
{ icon: 'bed', name: 'setoftwopillows' },
|
||||
{ icon: 'chair', name: 'armchairbed' },
|
||||
{ icon: 'meeting_room', name: 'separatebedroom' },
|
||||
{ icon: 'pedal_bike', name: 'bikeforloan' },
|
||||
{ icon: 'bakery_dining', name: 'breakfast' },
|
||||
{ icon: 'bakery_dining', name: 'servesbreakfastalwaysincluded' },
|
||||
{ icon: 'business_center', name: 'meetingconferencefacilities' },
|
||||
{ icon: 'business_center', name: 'meetingrooms' },
|
||||
{ icon: 'router', name: 'internetwithcableintheroom' },
|
||||
{ icon: 'chair', name: 'armchair' },
|
||||
{ icon: 'chair', name: 'chair' },
|
||||
{ icon: 'meeting_room', name: 'connectingrooms' },
|
||||
{ icon: 'location_city', name: 'viewcityview' },
|
||||
{ icon: 'coffee_maker', name: 'nespressomachine' },
|
||||
{ icon: 'dining', name: 'café' },
|
||||
{ icon: 'coffee', name: 'coffee' },
|
||||
{ icon: 'coffee_maker', name: 'coffeemachine' },
|
||||
{ icon: 'concierge', name: 'lifestyleconcierge' },
|
||||
{ icon: 'mode_fan', name: 'aircooling' },
|
||||
{ icon: 'mode_fan', name: 'cooler' },
|
||||
{ icon: 'desk', name: 'deskandchair' },
|
||||
{ icon: 'desk', name: 'desk' },
|
||||
{ icon: 'dining', name: 'diningarea' },
|
||||
{ icon: 'table_bar', name: 'tablefordining' },
|
||||
{ icon: 'electric_bike', name: 'ebikeschargingstation' },
|
||||
{ icon: 'family_restroom', name: 'extrafamilyfriendly' },
|
||||
{ icon: 'exercise', name: 'gym' },
|
||||
{ icon: 'health_and_beauty', name: 'beautysalon' },
|
||||
{ icon: 'bathroom', name: 'bathroom2separatebathrooms' },
|
||||
{ icon: 'credit_card_heart', name: 'cashfree800pmtill0600am' },
|
||||
{ icon: 'credit_card_heart', name: 'cashfreehotel' },
|
||||
{ icon: 'confirmation_number', name: 'coffeevoucher' },
|
||||
{ icon: 'water_full', name: 'complimentarycoldrefreshments' },
|
||||
{ icon: 'groups', name: 'conventioncentre' },
|
||||
{ icon: 'accessible', name: 'disabledparking' },
|
||||
{ icon: 'charging_station', name: 'dockingstationforipodipad' },
|
||||
{ icon: 'cool_to_dry', name: 'dryingcabinet' },
|
||||
{ icon: 'assistant_navigation', name: 'easyaccess' },
|
||||
{ icon: 'laundry', name: 'garmentsteamer' },
|
||||
{ icon: 'stairs', name: 'highfloor' },
|
||||
{ icon: 'hot_tub', name: 'jaccuzzi' },
|
||||
{ icon: 'hot_tub', name: 'jacuzzi' },
|
||||
{ icon: 'countertops', name: 'kitchen' },
|
||||
{ icon: 'countertops', name: 'kitchenette' },
|
||||
{ icon: 'checked_bag', name: 'latecheckoutuntil1400guaranteed' },
|
||||
{ icon: 'music_cast', name: 'livemusicexhibitions' },
|
||||
{ icon: 'liquor', name: 'minibarincludedinroomrate' },
|
||||
{ icon: 'local_parking', name: 'parkingadditionalcost' },
|
||||
{ icon: 'sauna', name: 'privatesauna' },
|
||||
{ icon: 'kitchen', name: 'refrigerator' },
|
||||
{ icon: 'airline_seat_recline_normal', name: 'seatingarea' },
|
||||
{ icon: 'scene', name: 'separatelivingroom' },
|
||||
{ icon: 'chair', name: 'sofabed' },
|
||||
{ icon: 'chair', name: 'sofas' },
|
||||
{ icon: 'chair', name: 'sofa' },
|
||||
{ icon: 'bedroom_parent', name: 'spaciousroom' },
|
||||
{ icon: 'local_drink', name: 'stillandsparklingwater' },
|
||||
{ icon: 'table_bar', name: 'table' },
|
||||
{ icon: 'coffee_maker', name: 'tassimocoffeemaker' },
|
||||
{ icon: 'deck', name: 'terrace' },
|
||||
{ icon: 'iron', name: 'trouserpress' },
|
||||
{ icon: 'tv_guide', name: 'tv' },
|
||||
{ icon: 'tv_remote', name: 'tvwithcomplimentarymoviechannels' },
|
||||
{ icon: 'tv_remote', name: 'tvwithmoviechannels' },
|
||||
{ icon: 'live_tv', name: 'tvwithstreamingoption' },
|
||||
{ icon: 'hvac', name: 'ventilationinroom' },
|
||||
{ icon: 'landscape', name: 'viewfjordview' },
|
||||
{ icon: 'houseboat', name: 'viewlakeview' },
|
||||
{ icon: 'panorama', name: 'viewpanoramicview' },
|
||||
{ icon: 'sailing', name: 'viewseaview' },
|
||||
{ icon: 'ward', name: 'wallbed' },
|
||||
{ icon: 'pedal_bike', name: 'wallmountedcyclerack' },
|
||||
{ icon: 'dresser', name: 'wardrobe' },
|
||||
{ icon: 'spa', name: 'wellnessandsaunaentrancefeeadmission16years' },
|
||||
{ icon: 'spa', name: 'wellnesspoolsaunaentrancefeeadmission16years' },
|
||||
{ icon: 'curtains', name: 'windownook' },
|
||||
{ icon: 'iron', name: 'ironandironingboard' },
|
||||
{ icon: 'iron', name: 'ironingroom' },
|
||||
{ icon: 'kayaking', name: 'kayaksforloan' },
|
||||
{ icon: 'kettle', name: 'kettle' },
|
||||
{ icon: 'kettle', name: 'kettlewithcoffee' },
|
||||
{ icon: 'sync_saved_locally', name: 'laptopsafe' },
|
||||
{ icon: 'computer', name: 'laptoptray' },
|
||||
{ icon: 'local_laundry_service', name: 'laundryservice' },
|
||||
{ icon: 'local_bar', name: 'bar' },
|
||||
{ icon: 'deck', name: 'rooftopbar' },
|
||||
{ icon: 'local_bar', name: 'skybar' },
|
||||
{ icon: 'microwave', name: 'microwave' },
|
||||
{ icon: 'nature', name: 'viewparkview' },
|
||||
{ icon: 'nightlife', name: 'disconightclub' },
|
||||
{ icon: 'smoke_free', name: 'nonsmoking' },
|
||||
{ icon: 'deck', name: 'outdoorterrace' },
|
||||
{ icon: 'local_parking', name: 'parking' },
|
||||
{ icon: 'local_parking', name: 'parkingfreeparking' },
|
||||
{ icon: 'pets', name: 'petfriendlyrooms' },
|
||||
{ icon: 'phone', name: 'directdialphoneandvoicemail' },
|
||||
{ icon: 'restaurant', name: 'restaurant' },
|
||||
{ icon: 'room_service', name: 'roomservice' },
|
||||
{ icon: 'sauna', name: 'sauna' },
|
||||
{ icon: 'shower', name: 'bathroomwithshower' },
|
||||
{ icon: 'shower', name: 'rainshower' },
|
||||
{ icon: 'shower', name: 'sharedbathroomwithshower' },
|
||||
{ icon: 'radio', name: 'musicplayer' },
|
||||
{ icon: 'shopping_bag', name: 'shop' },
|
||||
{ icon: 'pool', name: 'pool' },
|
||||
{ icon: 'laundry', name: 'handwash' },
|
||||
{ icon: 'connected_tv', name: 'tvwithchromecast' },
|
||||
{ icon: 'wifi', name: 'freewifi' },
|
||||
{ icon: 'curtains_closed', name: 'blackoutcurtains' },
|
||||
{ icon: 'liquor', name: 'minibar' },
|
||||
{ icon: 'yard', name: 'viewatriumview' },
|
||||
]
|
||||
|
||||
const CustomIconMappings = [
|
||||
{ icon: BathroomCabinetIcon, name: 'bathroomwithshowerorbathtub' },
|
||||
{ icon: MovingBedsIcon, name: 'adjustablebeds' },
|
||||
{ icon: MovingBedsIcon, name: 'pulloutbed' },
|
||||
{ icon: BedHotelIcon, name: 'extrabed' },
|
||||
{ icon: CoolingIcon, name: 'coolingcabinet' },
|
||||
{ icon: FootStoolIcon, name: 'footstool' },
|
||||
{ icon: HairdryerIcon, name: 'hairdryer' },
|
||||
{ icon: HairdresserIcon, name: 'hairdresser' },
|
||||
{ icon: HandSoapIcon, name: 'toiletries' },
|
||||
{ icon: TowelIcon, name: 'bathrobes' },
|
||||
{ icon: HandSoapIcon, name: 'bodycareproducts' },
|
||||
{ icon: HandSoapIcon, name: 'bodylotion' },
|
||||
{ icon: BowlingPinsIcon, name: 'bowling' },
|
||||
{ icon: BunkBedIcon, name: 'bunkbed' },
|
||||
{ icon: BunkBedIcon, name: 'bunkbed80x188cm' },
|
||||
{ icon: IceMachineIcon, name: 'icemachine' },
|
||||
{ icon: IceMachineIcon, name: 'icemachinereception' },
|
||||
{ icon: MassageIcon, name: 'massage' },
|
||||
{ icon: ConferenceRoomIcon, name: 'meetingarea' },
|
||||
{ icon: UserPoliceIcon, name: 'overnightsecurity' },
|
||||
{ icon: UserPoliceIcon, name: 'security24hoours' },
|
||||
{ icon: UserPoliceIcon, name: 'servicesecurity24h' },
|
||||
{ icon: FootStoolIcon, name: 'footstool' },
|
||||
{ icon: WindowNotAvailableIcon, name: 'nowindow' },
|
||||
{ icon: DoorIcon, name: 'luggagelockers' },
|
||||
{ icon: MirrorIcon, name: 'cosmeticmirror' },
|
||||
{ icon: WardIcon, name: 'wallbed' },
|
||||
{ icon: CouchTableIcon, name: 'sofawithtable' },
|
||||
{ icon: SafetyBoxIcon, name: 'safetybox' },
|
||||
{ icon: RecordPlayerIcon, name: 'modernvinylplayer' },
|
||||
{ icon: RugIcon, name: 'carpetingwalltowallcarpet' },
|
||||
{ icon: ToiletIcon, name: 'separatetoilet' },
|
||||
{ icon: WoodFloorIcon, name: 'woodenfloor' },
|
||||
{ icon: ViewIcon, name: 'view' },
|
||||
{ icon: HandSoapIcon, name: 'shampoo' },
|
||||
{ icon: HandSoapIcon, name: 'conditioner' },
|
||||
{ icon: RoadIcon, name: 'viewstreetview' },
|
||||
{ icon: SlippersIcon, name: 'slippers' },
|
||||
{ icon: HandSoapIcon, name: 'showergel' },
|
||||
{ icon: HandSoapIcon, name: 'showerproductsscentbygrandcentral' },
|
||||
]
|
||||
@@ -78,6 +78,7 @@
|
||||
"./Icons/DiamondAddIcon": "./lib/components/Icons/Customised/Benefits/DiamondAdd.tsx",
|
||||
"./Icons/DiscountIcon": "./lib/components/Icons/Nucleo/Benefits/discount-2-2.tsx",
|
||||
"./Icons/FilledDiscountIcon": "./lib/components/Icons/Nucleo/Benefits/FilledDiscount.tsx",
|
||||
"./Icons/FacilityIcon": "./lib/components/Icons/FacilityIcon.tsx",
|
||||
"./Icons/DoorIcon": "./lib/components/Icons/Nucleo/Amenities_Facilities/door-2.tsx",
|
||||
"./Icons/DowntownCamperIcon": "./lib/components/Icons/Logos/DowntownCamper.tsx",
|
||||
"./Icons/FacebookIcon": "./lib/components/Icons/Customised/Socials/Facebook.tsx",
|
||||
|
||||
Reference in New Issue
Block a user