diff --git a/components/ContentType/HotelPage/AmenitiesList/amenitiesList.module.css b/components/ContentType/HotelPage/AmenitiesList/amenitiesList.module.css index f7dcea5fc..e35dc13a6 100644 --- a/components/ContentType/HotelPage/AmenitiesList/amenitiesList.module.css +++ b/components/ContentType/HotelPage/AmenitiesList/amenitiesList.module.css @@ -20,6 +20,10 @@ gap: var(--Spacing-x1); } +.icon { + flex-shrink: 0; +} + .showAllAmenities { width: fit-content; } diff --git a/components/ContentType/HotelPage/AmenitiesList/index.tsx b/components/ContentType/HotelPage/AmenitiesList/index.tsx index 8b6a1977e..8c90f19c2 100644 --- a/components/ContentType/HotelPage/AmenitiesList/index.tsx +++ b/components/ContentType/HotelPage/AmenitiesList/index.tsx @@ -16,9 +16,7 @@ export default async function AmenitiesList({ detailedFacilities, }: AmenitiesListProps) { const intl = await getIntl() - const sortedAmenities = detailedFacilities - .sort((a, b) => b.sortOrder - a.sortOrder) - .slice(0, 5) + const facilities = detailedFacilities.slice(0, 5) const lang = getLang() return (
@@ -26,11 +24,13 @@ export default async function AmenitiesList({ {intl.formatMessage({ id: "At the hotel" })}
- {sortedAmenities.map((facility) => { - const IconComponent = mapFacilityToIcon(facility.name) + {facilities.map((facility) => { + const IconComponent = mapFacilityToIcon(facility.id) return (
- {IconComponent && } + {IconComponent && ( + + )} {facility.name}
) diff --git a/components/ContentType/HotelPage/data.ts b/components/ContentType/HotelPage/data.ts index ace3a0408..e4043c53e 100644 --- a/components/ContentType/HotelPage/data.ts +++ b/components/ContentType/HotelPage/data.ts @@ -3,21 +3,287 @@ import { FC } from "react" import { getIconByIconName } from "@/components/Icons/get-icon-by-icon-name" import { IconName, IconProps } from "@/types/components/icon" +import { FacilityEnum } from "@/types/enums/facilities" -const facilityToIconMap: { [key: string]: IconName } = { - Bar: IconName.Bar, - "Bikes for loan": IconName.Biking, - Gym: IconName.Fitness, - "Free WiFi": IconName.Wifi, - //TODO: Ask design team what icon(s) should be used for meetings. - "Meeting rooms": IconName.People2, - "Meeting / conference facilities": IconName.People2, - "Pet-friendly rooms": IconName.Pets, - Sauna: IconName.Sauna, - Restaurant: IconName.Restaurant, +const facilityToIconMap: Record = { + [FacilityEnum.Bar]: IconName.LocalBar, + [FacilityEnum.Skybar]: IconName.LocalBar, + [FacilityEnum.RooftopBar]: IconName.LocalBar, + [FacilityEnum.BikesForLoan]: IconName.Biking, + [FacilityEnum.Gym]: IconName.Fitness, + [FacilityEnum.GymTrainingFacilities]: IconName.Fitness, + [FacilityEnum.KeyAccessOnlyToHealthClubGym]: IconName.Fitness, + [FacilityEnum.FreeWiFi]: IconName.Wifi, + [FacilityEnum.MeetingRooms]: IconName.People2, + [FacilityEnum.MeetingConferenceFacilities]: IconName.People2, + [FacilityEnum.PetFriendlyRooms]: IconName.Pets, + [FacilityEnum.Sauna]: IconName.Sauna, + [FacilityEnum.Restaurant]: IconName.Restaurant, + [FacilityEnum.ParkingGarage]: IconName.Garage, + [FacilityEnum.ParkingElectricCharging]: IconName.ElectricCar, + [FacilityEnum.ParkingFreeParking]: IconName.Parking, + [FacilityEnum.ParkingOutdoor]: IconName.Parking, + [FacilityEnum.ParkingAdditionalCost]: IconName.Parking, + [FacilityEnum.DisabledParking]: IconName.Parking, + [FacilityEnum.OutdoorTerrace]: IconName.OutdoorFurniture, + [FacilityEnum.RoomService]: IconName.RoomService, + [FacilityEnum.LaundryRoom]: IconName.LaundryMachine, + [FacilityEnum.LaundryService]: IconName.LaundryMachine, + [FacilityEnum.LaundryServiceExpress]: IconName.LaundryMachine, + [FacilityEnum.ScandicShop24Hrs]: IconName.ConvenienceStore24h, + [FacilityEnum.ServesBreakfastAlwaysIncluded]: IconName.CoffeeAlt, + [FacilityEnum.ServesBreakfastNotAlwaysIncluded]: IconName.CoffeeAlt, + [FacilityEnum.ServesOrganicBreakfastAlwaysIncluded]: IconName.CoffeeAlt, + [FacilityEnum.ServesOrganicBreakfastNotAlwaysIncluded]: IconName.CoffeeAlt, + [FacilityEnum.Breakfast]: IconName.CoffeeAlt, + [FacilityEnum.EBikesChargingStation]: IconName.ElectricBike, + [FacilityEnum.Shopping]: IconName.Shopping, + [FacilityEnum.Golf]: IconName.Golf, + [FacilityEnum.GolfCourse0To30Km]: IconName.Golf, + [FacilityEnum.TVWithChromecast1]: IconName.TvCasting, + [FacilityEnum.TVWithChromecast2]: IconName.TvCasting, + [FacilityEnum.DJLiveMusic]: IconName.Nightlife, + [FacilityEnum.DiscoNightClub]: IconName.Nightlife, + [FacilityEnum.CoffeeInReceptionAtCharge]: IconName.CoffeeAlt, + [FacilityEnum.CoffeeShop]: IconName.CoffeeAlt, + [FacilityEnum.CoffeeTeaFacilities]: IconName.CoffeeAlt, + [FacilityEnum.SkateboardsForLoan]: IconName.Skateboarding, + [FacilityEnum.KayaksForLoan]: IconName.Kayaking, + [FacilityEnum.LifestyleConcierge]: IconName.Concierge, + [FacilityEnum.WellnessAndSaunaEntranceFeeAdmission16PlusYears]: + IconName.Sauna, + [FacilityEnum.WellnessPoolSaunaEntranceFeeAdmission16PlusYears]: + IconName.Sauna, + [FacilityEnum.Cafe]: IconName.Restaurant, + [FacilityEnum.Pool]: IconName.Swim, + [FacilityEnum.PoolSwimmingPoolJacuzziAtHotel]: IconName.Swim, + [FacilityEnum.VendingMachineWithNecessities]: IconName.Groceries, + + [FacilityEnum.Jacuzzi]: IconName.StarFilled, + [FacilityEnum.JacuzziInRoom]: IconName.StarFilled, + + [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.StarFilled, + [FacilityEnum.AirConAirCooling]: IconName.StarFilled, + [FacilityEnum.AirConditioningInRoom]: IconName.StarFilled, + [FacilityEnum.AirportMaxDistance8Km]: IconName.StarFilled, + [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.StarFilled, + [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.BasicMedicalEquipmentOnSite]: IconName.StarFilled, + [FacilityEnum.BathroomsAdaptedForDisabledGuests]: IconName.StarFilled, + [FacilityEnum.Beach]: IconName.StarFilled, + [FacilityEnum.Beach0To1Km]: IconName.StarFilled, + [FacilityEnum.BeautySalon]: IconName.StarFilled, + [FacilityEnum.BedroomsWithWheelchairAccess]: IconName.StarFilled, + [FacilityEnum.Bowling]: IconName.StarFilled, + [FacilityEnum.BrailleLargePrintHotelLiterature]: IconName.StarFilled, + [FacilityEnum.BrailleLargePrintMenus]: IconName.StarFilled, + [FacilityEnum.Business1]: IconName.StarFilled, + [FacilityEnum.Business2]: IconName.StarFilled, + [FacilityEnum.BusinessCentre]: IconName.StarFilled, + [FacilityEnum.CashFree8pmTill6am]: IconName.StarFilled, + [FacilityEnum.CashFreeHotel]: IconName.StarFilled, + [FacilityEnum.ChildrenWelcome]: IconName.StarFilled, + [FacilityEnum.City]: IconName.StarFilled, + [FacilityEnum.ColourTVInRoomsAllScandicHotels]: IconName.StarFilled, + [FacilityEnum.ComplimentaryColdRefreshments]: IconName.StarFilled, + [FacilityEnum.CongressHall]: IconName.StarFilled, + [FacilityEnum.ConventionCentre]: IconName.StarFilled, + [FacilityEnum.Couples]: IconName.StarFilled, + [FacilityEnum.DeadboltsOnConnectingDoors]: IconName.StarFilled, + [FacilityEnum.DeadboltsSecondaryLocksOnAllGuestRoomDoors]: + IconName.StarFilled, + [FacilityEnum.Defibrillator]: IconName.StarFilled, + [FacilityEnum.Desk]: IconName.StarFilled, + [FacilityEnum.DirectDialPhoneInRoomsAllScandic]: IconName.StarFilled, + [FacilityEnum.DisabledEmergencyPlan1]: IconName.StarFilled, + [FacilityEnum.DisabledEmergencyPlan2]: IconName.StarFilled, + [FacilityEnum.DO_NOT_USE_Restaurant]: IconName.StarFilled, + [FacilityEnum.Downtown]: IconName.StarFilled, + [FacilityEnum.DrinkableTapWater]: IconName.StarFilled, + [FacilityEnum.DVDPlayer]: IconName.StarFilled, + [FacilityEnum.ElectronicKeyCards]: IconName.StarFilled, + [FacilityEnum.Elevator]: IconName.StarFilled, + [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.StarFilled, + [FacilityEnum.EventVenue]: IconName.StarFilled, + [FacilityEnum.ExchangeFacility]: IconName.StarFilled, + [FacilityEnum.ExitMapsInRooms]: IconName.StarFilled, + [FacilityEnum.ExitSignsLit]: IconName.StarFilled, + [FacilityEnum.ExtraFamilyFriendly]: IconName.StarFilled, + [FacilityEnum.Families]: IconName.StarFilled, + [FacilityEnum.FaxFacilityInRoom]: IconName.StarFilled, + [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.StarFilled, + [FacilityEnum.GiftShop]: IconName.StarFilled, + [FacilityEnum.GuestRoomDoorsHaveASecondLock]: IconName.StarFilled, + [FacilityEnum.Hairdresser]: IconName.StarFilled, + [FacilityEnum.HairdryerInRoomAllScandic]: IconName.StarFilled, + [FacilityEnum.HandicapFacilities]: IconName.StarFilled, + [FacilityEnum.HandrailsInBathrooms]: IconName.StarFilled, + [FacilityEnum.HearingInductionLoops]: IconName.StarFilled, + [FacilityEnum.Highway1]: IconName.StarFilled, + [FacilityEnum.Highway2]: IconName.StarFilled, + [FacilityEnum.Hiking0To3Km]: IconName.StarFilled, + [FacilityEnum.HotelCompliesWithAAASecurityStandards]: IconName.StarFilled, + [FacilityEnum.HotelIsFollowingScandicsSafetySecurityPolicy]: + IconName.StarFilled, + [FacilityEnum.HotelWorksAccordingToScandicsAccessibilityConcepts]: + IconName.StarFilled, + [FacilityEnum.IceMachine]: IconName.StarFilled, + [FacilityEnum.IceMachineReception]: IconName.StarFilled, + [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.StarFilled, + [FacilityEnum.IronIroningBoardAllScandic]: IconName.StarFilled, + [FacilityEnum.KeyAccessOnlySecuredFloorsAvailable]: IconName.StarFilled, + [FacilityEnum.KidsPlayRoom]: IconName.StarFilled, + [FacilityEnum.KidsUpToAndIncluding12YearsStayForFree]: IconName.StarFilled, + [FacilityEnum.KitchenInRoom]: IconName.StarFilled, + [FacilityEnum.Lake0To1Km]: IconName.StarFilled, + [FacilityEnum.LakeOrSea0To1Km]: IconName.StarFilled, + [FacilityEnum.LaptopSafe]: IconName.StarFilled, + [FacilityEnum.Leisure]: IconName.StarFilled, + [FacilityEnum.LuggageLockers]: IconName.StarFilled, + [FacilityEnum.Massage]: IconName.StarFilled, + [FacilityEnum.MinibarInRoom]: IconName.StarFilled, + [FacilityEnum.MobileLift]: IconName.StarFilled, + [FacilityEnum.Mountains0To1Km]: IconName.StarFilled, + [FacilityEnum.MovieChannelsInRoomAllScandic]: IconName.StarFilled, + [FacilityEnum.MultipleExitsOnEachFloor]: IconName.StarFilled, + [FacilityEnum.NonSmokingRoomsAllScandic]: IconName.StarFilled, + [FacilityEnum.OnSiteTrainingFacilities]: IconName.StarFilled, + [FacilityEnum.OtherExplainInBriefDescription]: IconName.StarFilled, + [FacilityEnum.OvernightSecurity]: IconName.StarFilled, + [FacilityEnum.ParkingAttendant]: IconName.StarFilled, + [FacilityEnum.PCHookUpInRoom]: IconName.StarFilled, + [FacilityEnum.PillowAlarmsAvailable]: IconName.StarFilled, + [FacilityEnum.PlayStationInPlayArea]: IconName.StarFilled, + [FacilityEnum.PrintingService]: IconName.StarFilled, + [FacilityEnum.PropertyMeetsRequirementsFireSafety]: IconName.StarFilled, + [FacilityEnum.PublicAddressSystem]: IconName.StarFilled, + [FacilityEnum.RelaxationSuite]: IconName.StarFilled, + [FacilityEnum.RestrictedRoomAccessAllScandic]: IconName.StarFilled, + [FacilityEnum.RoomsAccessibleFromTheInterior]: IconName.StarFilled, + [FacilityEnum.RoomWindowsOpen]: IconName.StarFilled, + [FacilityEnum.RoomWindowsThatOpenHaveLockingDevice]: IconName.StarFilled, + [FacilityEnum.Rural1]: IconName.StarFilled, + [FacilityEnum.Rural2]: IconName.StarFilled, + [FacilityEnum.SafeDepositBoxInRoomsAllScandic]: IconName.StarFilled, + [FacilityEnum.SafeDepositBoxInRoomsCanHoldA17InchLaptop]: IconName.StarFilled, + [FacilityEnum.SafeDepositBoxInRoomsCannotHoldALaptop]: IconName.StarFilled, + [FacilityEnum.SafetyChainsOnGuestRoomDoor]: IconName.StarFilled, + [FacilityEnum.SecondaryLocksOnSlidingGlassDoors]: IconName.StarFilled, + [FacilityEnum.SecondaryLocksOnWindows]: IconName.StarFilled, + [FacilityEnum.Security24Hours]: IconName.StarFilled, + [FacilityEnum.SecurityEscortsAvailableOnRequest]: IconName.StarFilled, + [FacilityEnum.SecurityPersonnelOnSite]: IconName.StarFilled, + [FacilityEnum.SeparateFloorsForWomen]: IconName.StarFilled, + [FacilityEnum.ServiceGuideDogsAllowed]: IconName.StarFilled, + [FacilityEnum.ServiceSecurity24Hrs]: IconName.StarFilled, + [FacilityEnum.Skiing0To1Km]: IconName.StarFilled, + [FacilityEnum.SmokeDetectorsAllScandic]: IconName.StarFilled, + [FacilityEnum.Solarium]: IconName.StarFilled, + [FacilityEnum.SpecialNeedsMenus]: IconName.StarFilled, + [FacilityEnum.Sports]: IconName.StarFilled, + [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.StarFilled, + [FacilityEnum.Tennis2]: IconName.StarFilled, + [FacilityEnum.TennisPadel]: IconName.StarFilled, + [FacilityEnum.Theatre]: IconName.StarFilled, + [FacilityEnum.TrouserPress]: IconName.StarFilled, + [FacilityEnum.UniformSecurityOnPremises]: IconName.StarFilled, + [FacilityEnum.UtilityRoomForIroning]: IconName.StarFilled, + [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.StarFilled, + [FacilityEnum.WellLitWalkways]: IconName.StarFilled, + [FacilityEnum.WheelchairAccess]: IconName.StarFilled, + [FacilityEnum.WideCorridors]: IconName.StarFilled, + [FacilityEnum.WideEntrance]: IconName.StarFilled, + [FacilityEnum.WideRestaurantEntrance]: IconName.StarFilled, + [FacilityEnum.WiFiWirelessInternetAccessAllScandic]: IconName.StarFilled, } -export function mapFacilityToIcon(facilityName: string): FC | null { - const iconName = facilityToIconMap[facilityName] +export function mapFacilityToIcon(id: FacilityEnum): FC | null { + const iconName = facilityToIconMap[id] return getIconByIconName(iconName) || null } diff --git a/components/HotelReservation/HotelCard/index.tsx b/components/HotelReservation/HotelCard/index.tsx index ea3eb29b7..67ce49f17 100644 --- a/components/HotelReservation/HotelCard/index.tsx +++ b/components/HotelReservation/HotelCard/index.tsx @@ -22,9 +22,7 @@ export default async function HotelCard({ hotel }: HotelCardProps) { const { hotelData } = hotel const { price } = hotel - const sortedAmenities = hotelData.detailedFacilities - .sort((a, b) => b.sortOrder - a.sortOrder) - .slice(0, 5) + const amenities = hotelData.detailedFacilities.slice(0, 5) return (
@@ -57,8 +55,8 @@ export default async function HotelCard({ hotel }: HotelCardProps) {
- {sortedAmenities.map((facility) => { - const IconComponent = mapFacilityToIcon(facility.name) + {amenities.map((facility) => { + const IconComponent = mapFacilityToIcon(facility.id) return (
{IconComponent && } diff --git a/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx b/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx index 5e0a24623..1ec58dd07 100644 --- a/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx +++ b/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx @@ -67,7 +67,7 @@ export default function HotelInfoCard({ hotelData }: HotelInfoCardProps) { {intl.formatMessage({ id: "At the hotel" })} {sortedFacilities?.map((facility) => { - const IconComponent = mapFacilityToIcon(facility.name) + const IconComponent = mapFacilityToIcon(facility.id) return (
{IconComponent && ( diff --git a/components/Icons/Accesories.tsx b/components/Icons/Accesories.tsx new file mode 100644 index 000000000..9aaf0c894 --- /dev/null +++ b/components/Icons/Accesories.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function AccesoriesIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Air.tsx b/components/Icons/Air.tsx new file mode 100644 index 000000000..239566515 --- /dev/null +++ b/components/Icons/Air.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function AirIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Coffee.tsx b/components/Icons/CoffeeAlt.tsx similarity index 96% rename from components/Icons/Coffee.tsx rename to components/Icons/CoffeeAlt.tsx index 840f78b0d..e76da5126 100644 --- a/components/Icons/Coffee.tsx +++ b/components/Icons/CoffeeAlt.tsx @@ -2,7 +2,11 @@ import { iconVariants } from "./variants" import type { IconProps } from "@/types/components/icon" -export default function CoffeeIcon({ className, color, ...props }: IconProps) { +export default function CoffeeAltIcon({ + className, + color, + ...props +}: IconProps) { const classNames = iconVariants({ className, color }) return ( + + + + + + + + ) +} diff --git a/components/Icons/Cool.tsx b/components/Icons/Cool.tsx new file mode 100644 index 000000000..efa5ae67f --- /dev/null +++ b/components/Icons/Cool.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function CoolIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/DoorOpen.tsx b/components/Icons/DoorOpen.tsx index f70c29859..93bc2caf4 100644 --- a/components/Icons/DoorOpen.tsx +++ b/components/Icons/DoorOpen.tsx @@ -2,7 +2,11 @@ import { iconVariants } from "./variants" import type { IconProps } from "@/types/components/icon" -export default function CoffeeIcon({ className, color, ...props }: IconProps) { +export default function DoorOpenIcon({ + className, + color, + ...props +}: IconProps) { const classNames = iconVariants({ className, color }) return ( + + + + + + + + ) +} diff --git a/components/Icons/ElectricCar.tsx b/components/Icons/ElectricCar.tsx new file mode 100644 index 000000000..1f9500b64 --- /dev/null +++ b/components/Icons/ElectricCar.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function ElectricCarIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Fan.tsx b/components/Icons/Fan.tsx new file mode 100644 index 000000000..128200104 --- /dev/null +++ b/components/Icons/Fan.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function FanIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Footstool.tsx b/components/Icons/Footstool.tsx new file mode 100644 index 000000000..becb0fd80 --- /dev/null +++ b/components/Icons/Footstool.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function FootstoolIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Garage.tsx b/components/Icons/Garage.tsx new file mode 100644 index 000000000..b715532cc --- /dev/null +++ b/components/Icons/Garage.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function GarageIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Golf.tsx b/components/Icons/Golf.tsx new file mode 100644 index 000000000..027c906d7 --- /dev/null +++ b/components/Icons/Golf.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function GolfIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Groceries.tsx b/components/Icons/Groceries.tsx new file mode 100644 index 000000000..404f09f7b --- /dev/null +++ b/components/Icons/Groceries.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function GroceriesIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Hanger.tsx b/components/Icons/Hanger.tsx new file mode 100644 index 000000000..63c869619 --- /dev/null +++ b/components/Icons/Hanger.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function HangerIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/HangerAlt.tsx b/components/Icons/HangerAlt.tsx new file mode 100644 index 000000000..732656e60 --- /dev/null +++ b/components/Icons/HangerAlt.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function HangerAltIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Heat.tsx b/components/Icons/Heat.tsx new file mode 100644 index 000000000..ef093e955 --- /dev/null +++ b/components/Icons/Heat.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function HeatIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Kayaking.tsx b/components/Icons/Kayaking.tsx new file mode 100644 index 000000000..1d4061a3a --- /dev/null +++ b/components/Icons/Kayaking.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function KayakingIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Kettle.tsx b/components/Icons/Kettle.tsx new file mode 100644 index 000000000..28713719a --- /dev/null +++ b/components/Icons/Kettle.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function KettleIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Lamp.tsx b/components/Icons/Lamp.tsx new file mode 100644 index 000000000..bde8af3dd --- /dev/null +++ b/components/Icons/Lamp.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function LampIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/LaundryMachine.tsx b/components/Icons/LaundryMachine.tsx new file mode 100644 index 000000000..b4225197d --- /dev/null +++ b/components/Icons/LaundryMachine.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function LaundryMachineIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/LocalBar.tsx b/components/Icons/LocalBar.tsx new file mode 100644 index 000000000..7a5b3bb51 --- /dev/null +++ b/components/Icons/LocalBar.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function LocalBarIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Nature.tsx b/components/Icons/Nature.tsx new file mode 100644 index 000000000..4c48c377f --- /dev/null +++ b/components/Icons/Nature.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function NatureIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Nightlife.tsx b/components/Icons/Nightlife.tsx new file mode 100644 index 000000000..093099cb9 --- /dev/null +++ b/components/Icons/Nightlife.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function NightlifeIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/NoSmoking.tsx b/components/Icons/NoSmoking.tsx new file mode 100644 index 000000000..bdaa7d3f3 --- /dev/null +++ b/components/Icons/NoSmoking.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function NoSmokingIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/OutdoorFurniture.tsx b/components/Icons/OutdoorFurniture.tsx new file mode 100644 index 000000000..3ddac9f38 --- /dev/null +++ b/components/Icons/OutdoorFurniture.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function OutdoorFurnitureIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/RoomService.tsx b/components/Icons/RoomService.tsx new file mode 100644 index 000000000..00aadd7d0 --- /dev/null +++ b/components/Icons/RoomService.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function RoomServiceIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Skateboarding.tsx b/components/Icons/Skateboarding.tsx new file mode 100644 index 000000000..6c0106ff3 --- /dev/null +++ b/components/Icons/Skateboarding.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function SkateboardingIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Smoking.tsx b/components/Icons/Smoking.tsx new file mode 100644 index 000000000..58c30abce --- /dev/null +++ b/components/Icons/Smoking.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function SmokingIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Spa.tsx b/components/Icons/Spa.tsx new file mode 100644 index 000000000..f3141a4e4 --- /dev/null +++ b/components/Icons/Spa.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function SpaIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Street.tsx b/components/Icons/Street.tsx new file mode 100644 index 000000000..414df197c --- /dev/null +++ b/components/Icons/Street.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function StreetIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Swim.tsx b/components/Icons/Swim.tsx new file mode 100644 index 000000000..abd2bd29a --- /dev/null +++ b/components/Icons/Swim.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function SwimIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Thermostat.tsx b/components/Icons/Thermostat.tsx new file mode 100644 index 000000000..2fd3ebe97 --- /dev/null +++ b/components/Icons/Thermostat.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function ThermostatIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/Tshirt.tsx b/components/Icons/Tshirt.tsx new file mode 100644 index 000000000..e6643725b --- /dev/null +++ b/components/Icons/Tshirt.tsx @@ -0,0 +1,36 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function TshirtIcon({ className, color, ...props }: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/TvCasting.tsx b/components/Icons/TvCasting.tsx new file mode 100644 index 000000000..ea6e7b90d --- /dev/null +++ b/components/Icons/TvCasting.tsx @@ -0,0 +1,40 @@ +import { iconVariants } from "./variants" + +import type { IconProps } from "@/types/components/icon" + +export default function TvCastingIcon({ + className, + color, + ...props +}: IconProps) { + const classNames = iconVariants({ className, color }) + return ( + + + + + + + + + ) +} diff --git a/components/Icons/get-icon-by-icon-name.ts b/components/Icons/get-icon-by-icon-name.ts index 15752b50c..f5410421f 100644 --- a/components/Icons/get-icon-by-icon-name.ts +++ b/components/Icons/get-icon-by-icon-name.ts @@ -4,8 +4,10 @@ import FacebookIcon from "./Facebook" import InstagramIcon from "./Instagram" import TripAdvisorIcon from "./TripAdvisor" import { + AccesoriesIcon, AccessibilityIcon, AccountCircleIcon, + AirIcon, AirplaneIcon, ArrowRightIcon, BarIcon, @@ -22,27 +24,48 @@ import { ChevronRightSmallIcon, CloseIcon, CloseLargeIcon, - CoffeeIcon, + CoffeeAltIcon, ConciergeIcon, + ConvenienceStore24hIcon, + CoolIcon, CrossCircle, CulturalIcon, DoorOpenIcon, + DresserIcon, ElectricBikeIcon, + ElectricCarIcon, EmailIcon, EyeHideIcon, EyeShowIcon, + FanIcon, FitnessIcon, + FootstoolIcon, GalleryIcon, + GarageIcon, GiftIcon, GlobeIcon, + GolfIcon, + GroceriesIcon, + HangerAltIcon, + HangerIcon, + HeatIcon, HouseIcon, ImageIcon, InfoCircleIcon, + KayakingIcon, + KettleIcon, + LampIcon, + LaundryMachineIcon, + LocalBarIcon, LocationIcon, LockIcon, MapIcon, MinusIcon, MuseumIcon, + NatureIcon, + NightlifeIcon, + NoSmokingIcon, + OutdoorFurnitureIcon, ParkingIcon, People2Icon, PersonIcon, @@ -51,14 +74,23 @@ import { PlusCircleIcon, PlusIcon, RestaurantIcon, + RoomServiceIcon, SaunaIcon, SearchIcon, ServiceIcon, ShoppingIcon, + SkateboardingIcon, + SmokingIcon, SnowflakeIcon, + SpaIcon, StarFilledIcon, + StreetIcon, + SwimIcon, + ThermostatIcon, TrainIcon, + TshirtIcon, TshirtWashIcon, + TvCastingIcon, WarningTriangle, WifiIcon, } from "." @@ -67,10 +99,14 @@ import { IconName, IconProps } from "@/types/components/icon" export function getIconByIconName(icon?: IconName): FC | null { switch (icon) { + case IconName.Accesories: + return AccesoriesIcon case IconName.Accessibility: return AccessibilityIcon case IconName.AccountCircle: return AccountCircleIcon + case IconName.Air: + return AirIcon case IconName.Airplane: return AirplaneIcon case IconName.ArrowRight: @@ -105,32 +141,56 @@ export function getIconByIconName(icon?: IconName): FC | null { return CloseIcon case IconName.CloseLarge: return CloseLargeIcon - case IconName.Coffee: - return CoffeeIcon + case IconName.ConvenienceStore24h: + return ConvenienceStore24hIcon + case IconName.Cool: + return CoolIcon + case IconName.CoffeeAlt: + return CoffeeAltIcon case IconName.Concierge: return ConciergeIcon case IconName.Cultural: return CulturalIcon case IconName.DoorOpen: return DoorOpenIcon + case IconName.Dresser: + return DresserIcon case IconName.ElectricBike: return ElectricBikeIcon + case IconName.ElectricCar: + return ElectricCarIcon case IconName.Email: return EmailIcon case IconName.EyeHide: return EyeHideIcon case IconName.EyeShow: return EyeShowIcon + case IconName.Fan: + return FanIcon case IconName.Facebook: return FacebookIcon case IconName.Fitness: return FitnessIcon + case IconName.Footstool: + return FootstoolIcon case IconName.Gallery: return GalleryIcon + case IconName.Garage: + return GarageIcon case IconName.Gift: return GiftIcon case IconName.Globe: return GlobeIcon + case IconName.Golf: + return GolfIcon + case IconName.Groceries: + return GroceriesIcon + case IconName.Hanger: + return HangerIcon + case IconName.HangerAlt: + return HangerAltIcon + case IconName.Heat: + return HeatIcon case IconName.House: return HouseIcon case IconName.Image: @@ -139,6 +199,16 @@ export function getIconByIconName(icon?: IconName): FC | null { return InfoCircleIcon case IconName.Instagram: return InstagramIcon + case IconName.Kayaking: + return KayakingIcon + case IconName.Kettle: + return KettleIcon + case IconName.Lamp: + return LampIcon + case IconName.LaundryMachine: + return LaundryMachineIcon + case IconName.LocalBar: + return LocalBarIcon case IconName.Location: return LocationIcon case IconName.Lock: @@ -149,6 +219,14 @@ export function getIconByIconName(icon?: IconName): FC | null { return MinusIcon case IconName.Museum: return MuseumIcon + case IconName.Nature: + return NatureIcon + case IconName.Nightlife: + return NightlifeIcon + case IconName.NoSmoking: + return NoSmokingIcon + case IconName.OutdoorFurniture: + return OutdoorFurnitureIcon case IconName.Parking: return ParkingIcon case IconName.Person: @@ -165,6 +243,12 @@ export function getIconByIconName(icon?: IconName): FC | null { return PlusCircleIcon case IconName.Restaurant: return RestaurantIcon + case IconName.RoomService: + return RoomServiceIcon + case IconName.Smoking: + return SmokingIcon + case IconName.Spa: + return SpaIcon case IconName.Sauna: return SaunaIcon case IconName.Search: @@ -173,16 +257,28 @@ export function getIconByIconName(icon?: IconName): FC | null { return ServiceIcon case IconName.Shopping: return ShoppingIcon + case IconName.Skateboarding: + return SkateboardingIcon case IconName.Snowflake: return SnowflakeIcon case IconName.StarFilled: return StarFilledIcon + case IconName.Street: + return StreetIcon + case IconName.Swim: + return SwimIcon + case IconName.Thermostat: + return ThermostatIcon + case IconName.Tshirt: + return TshirtIcon case IconName.Train: return TrainIcon case IconName.Tripadvisor: return TripAdvisorIcon case IconName.TshirtWash: return TshirtWashIcon + case IconName.TvCasting: + return TvCastingIcon case IconName.WarningTriangle: return WarningTriangle case IconName.Wifi: diff --git a/components/Icons/index.tsx b/components/Icons/index.tsx index e8a0b6433..8a7764dd6 100644 --- a/components/Icons/index.tsx +++ b/components/Icons/index.tsx @@ -1,5 +1,7 @@ +export { default as AccesoriesIcon } from "./Accesories" export { default as AccessibilityIcon } from "./Accessibility" export { default as AccountCircleIcon } from "./AccountCircle" +export { default as AirIcon } from "./Air" export { default as AirplaneIcon } from "./Airplane" export { default as ArrowRightIcon } from "./ArrowRight" export { default as BarIcon } from "./Bar" @@ -17,34 +19,55 @@ export { default as ChevronRightIcon } from "./ChevronRight" export { default as ChevronRightSmallIcon } from "./ChevronRightSmall" export { default as CloseIcon } from "./Close" export { default as CloseLargeIcon } from "./CloseLarge" -export { default as CoffeeIcon } from "./Coffee" +export { default as CoffeeAltIcon } from "./CoffeeAlt" export { default as ConciergeIcon } from "./Concierge" +export { default as ConvenienceStore24hIcon } from "./ConvenienceStore24h" +export { default as CoolIcon } from "./Cool" export { default as CreditCard } from "./CreditCard" export { default as CrossCircle } from "./CrossCircle" export { default as CulturalIcon } from "./Cultural" export { default as DeleteIcon } from "./Delete" export { default as DoorOpenIcon } from "./DoorOpen" +export { default as DresserIcon } from "./Dresser" export { default as EditIcon } from "./Edit" export { default as ElectricBikeIcon } from "./ElectricBike" +export { default as ElectricCarIcon } from "./ElectricCar" export { default as EmailIcon } from "./Email" 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 FitnessIcon } from "./Fitness" +export { default as FootstoolIcon } from "./Footstool" export { default as GalleryIcon } from "./Gallery" +export { default as GarageIcon } from "./Garage" export { default as GiftIcon } from "./Gift" export { default as GlobeIcon } from "./Globe" +export { default as GolfIcon } from "./Golf" +export { default as GroceriesIcon } from "./Groceries" +export { default as HangerIcon } from "./Hanger" +export { default as HangerAltIcon } from "./HangerAlt" export { default as HeartIcon } from "./Heart" +export { default as HeatIcon } from "./Heat" export { default as HouseIcon } from "./House" export { default as ImageIcon } from "./Image" export { default as InfoCircleIcon } from "./InfoCircle" +export { default as KayakingIcon } from "./Kayaking" +export { default as KettleIcon } from "./Kettle" export { default as KingBedIcon } from "./KingBed" +export { default as LampIcon } from "./Lamp" +export { default as LaundryMachineIcon } from "./LaundryMachine" +export { default as LocalBarIcon } from "./LocalBar" export { default as LocationIcon } from "./Location" export { default as LockIcon } from "./Lock" export { default as MapIcon } from "./Map" export { default as MinusIcon } from "./Minus" export { default as MuseumIcon } from "./Museum" +export { default as NatureIcon } from "./Nature" +export { default as NightlifeIcon } from "./Nightlife" export { default as NoBreakfastIcon } from "./NoBreakfast" +export { default as NoSmokingIcon } from "./NoSmoking" +export { default as OutdoorFurnitureIcon } from "./OutdoorFurniture" export { default as ParkingIcon } from "./Parking" export { default as People2Icon } from "./People2" export { default as PersonIcon } from "./Person" @@ -54,14 +77,23 @@ export { default as PlusIcon } from "./Plus" export { default as PlusCircleIcon } from "./PlusCircle" export { default as PriceTagIcon } from "./PriceTag" export { default as RestaurantIcon } from "./Restaurant" +export { default as RoomServiceIcon } from "./RoomService" export { default as SaunaIcon } from "./Sauna" export { default as ScandicLogoIcon } from "./ScandicLogo" export { default as SearchIcon } from "./Search" export { default as ServiceIcon } from "./Service" export { default as ShoppingIcon } from "./Shopping" +export { default as SkateboardingIcon } from "./Skateboarding" +export { default as SmokingIcon } from "./Smoking" export { default as SnowflakeIcon } from "./Snowflake" +export { default as SpaIcon } from "./Spa" export { default as StarFilledIcon } from "./StarFilled" +export { default as StreetIcon } from "./Street" +export { default as SwimIcon } from "./Swim" +export { default as ThermostatIcon } from "./Thermostat" export { default as TrainIcon } from "./Train" +export { default as TshirtIcon } from "./Tshirt" export { default as TshirtWashIcon } from "./TshirtWash" +export { default as TvCastingIcon } from "./TvCasting" export { default as WarningTriangle } from "./WarningTriangle" export { default as WifiIcon } from "./Wifi" diff --git a/server/routers/hotels/output.ts b/server/routers/hotels/output.ts index 5692497f1..89e286185 100644 --- a/server/routers/hotels/output.ts +++ b/server/routers/hotels/output.ts @@ -6,6 +6,7 @@ import { imageMetaDataSchema, imageSizesSchema } from "./schemas/image" import { roomSchema } from "./schemas/room" import { getPoiGroupByCategoryName } from "./utils" +import { FacilityEnum } from "@/types/enums/facilities" import { PointOfInterestCategoryNameEnum } from "@/types/hotel" const ratingsSchema = z @@ -142,7 +143,7 @@ const hotelContentSchema = z.object({ }) const detailedFacilitySchema = z.object({ - id: z.number(), + id: z.nativeEnum(FacilityEnum), name: z.string(), public: z.boolean(), sortOrder: z.number(), @@ -402,7 +403,11 @@ export const getHotelDataSchema = z.object({ }), location: locationSchema, hotelContent: hotelContentSchema, - detailedFacilities: z.array(detailedFacilitySchema), + detailedFacilities: z + .array(detailedFacilitySchema) + .transform((facilities) => + facilities.sort((a, b) => b.sortOrder - a.sortOrder) + ), healthFacilities: z.array(healthFacilitySchema), merchantInformationData: merchantInformationSchema, rewardNight: rewardNightSchema, diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 4b3f1a84e..2fa4cfbe8 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -46,7 +46,7 @@ import { TWENTYFOUR_HOURS, } from "./utils" -import { FacilityEnum } from "@/types/components/hotelPage/facilities" +import { FacilityCardTypeEnum } from "@/types/components/hotelPage/facilities" import { AvailabilityEnum } from "@/types/components/hotelReservation/selectHotel/selectHotel" import type { RequestOptionsWithOutBody } from "@/types/fetch" import type { Facility } from "@/types/hotel" @@ -231,15 +231,15 @@ export const hotelQueryRouter = router({ const facilities: Facility[] = [ { ...apiJson.data.attributes.restaurantImages, - id: FacilityEnum.restaurant, + id: FacilityCardTypeEnum.restaurant, }, { ...apiJson.data.attributes.conferencesAndMeetings, - id: FacilityEnum.conference, + id: FacilityCardTypeEnum.conference, }, { ...apiJson.data.attributes.healthAndWellness, - id: FacilityEnum.wellness, + id: FacilityCardTypeEnum.wellness, }, ] diff --git a/types/components/hotelPage/facilities.ts b/types/components/hotelPage/facilities.ts index 98a6a444d..333313fe0 100644 --- a/types/components/hotelPage/facilities.ts +++ b/types/components/hotelPage/facilities.ts @@ -34,7 +34,7 @@ export type CardGridProps = { facilitiesCardGrid: FacilityGrid } -export enum FacilityEnum { +export enum FacilityCardTypeEnum { wellness = "wellness-and-exercise", conference = "meetings-and-conferences", restaurant = "restaurant-and-bar", @@ -46,9 +46,3 @@ export enum RestaurantHeadings { restaurant = "Restaurant", breakfastRestaurant = "Breakfast restaurant", } - -export enum FacilityIds { - bar = 1606, - rooftopBar = 1014, - restaurant = 1383, -} diff --git a/types/components/icon.ts b/types/components/icon.ts index f50a79259..290c9ed32 100644 --- a/types/components/icon.ts +++ b/types/components/icon.ts @@ -7,8 +7,10 @@ export interface IconProps VariantProps {} export enum IconName { + Accesories = "Accesories", Accessibility = "Accessibility", AccountCircle = "AccountCircle", + Air = "Air", Airplane = "Airplane", ArrowRight = "ArrowRight", Bar = "Bar", @@ -18,7 +20,6 @@ export enum IconName { Camera = "Camera", Cellphone = "Cellphone", Check = "Check", - CrossCircle = "CrossCircle", CheckCircle = "CheckCircle", ChevronDown = "ChevronDown", ChevronLeft = "ChevronLeft", @@ -26,45 +27,76 @@ export enum IconName { ChevronRightSmall = "ChevronRightSmall", Close = "Close", CloseLarge = "CloseLarge", - Coffee = "Coffee", + CoffeeAlt = "CoffeeAlt", Concierge = "Concierge", + ConvenienceStore24h = "ConvenienceStore24h", + Cool = "Cool", + CrossCircle = "CrossCircle", Cultural = "Cultural", DoorOpen = "DoorOpen", + Dresser = "Dresser", ElectricBike = "ElectricBike", + ElectricCar = "ElectricCar", Email = "Email", EyeHide = "EyeHide", EyeShow = "EyeShow", Facebook = "Facebook", + Fan = "Fan", Fitness = "Fitness", + Footstool = "Footstool", Gallery = "Gallery", + Garage = "Garage", Gift = "Gift", Globe = "Globe", + Golf = "Golf", + Groceries = "Groceries", + Hanger = "Hanger", + HangerAlt = "HangerAlt", + Heat = "Heat", House = "House", Image = "Image", InfoCircle = "InfoCircle", Instagram = "Instagram", + Kayaking = "Kayaking", + Kettle = "Kettle", + Lamp = "Lamp", + LaundryMachine = "LaundryMachine", + LocalBar = "LocalBar", Location = "Location", Lock = "Lock", Map = "Map", Minus = "Minus", Museum = "Museum", + Nature = "Nature", + Nightlife = "Nightlife", + NoSmoking = "NoSmoking", + OutdoorFurniture = "OutdoorFurniture", Parking = "Parking", - Person = "Person", People2 = "People2", + Person = "Person", Pets = "Pets", Phone = "Phone", Plus = "Plus", PlusCircle = "PlusCircle", Restaurant = "Restaurant", + RoomService = "RoomService", Sauna = "Sauna", Search = "Search", Service = "Service", Shopping = "Shopping", + Skateboarding = "Skateboarding", + Smoking = "Smoking", Snowflake = "Snowflake", + Spa = "Spa", StarFilled = "StarFilled", + Street = "Street", + Swim = "Swim", + Thermostat = "Thermostat", Train = "Train", Tripadvisor = "Tripadvisor", + Tshirt = "Tshirt", TshirtWash = "TshirtWash", - Wifi = "Wifi", + TvCasting = "TvCasting", WarningTriangle = "WarningTriangle", + Wifi = "Wifi", } diff --git a/types/enums/facilities.ts b/types/enums/facilities.ts new file mode 100644 index 000000000..169aad6c0 --- /dev/null +++ b/types/enums/facilities.ts @@ -0,0 +1,262 @@ +export enum FacilityEnum { + AccessibleBathingControls = 2065, + AccessibleBathtubs = 2062, + AccessibleElevators = 2067, + AccessibleLightSwitch = 2066, + AccessibleRoomsAtHotel1 = 2659, + AccessibleRoomsAtHotel2 = 3010, + AccessibleToilets = 2068, + AccessibleWashBasins = 2063, + AdaptedRoomDoors = 2080, + AdjoiningConventionCentre = 1560, + AirConAirCooling = 2660, + AirConditioningInRoom = 5763, + AirportMaxDistance8Km = 1856, + AlarmsContinuouslyMonitored = 1876, + AlarmsHaveStrobeLightsForDeafHardHearingInAllGuestRooms = 1877, + AlarmsHaveStrobeLightsForDeafHardHearingInAllHallways = 1878, + AlarmsHaveStrobeLightsForDeafHardHearingInAllPublicAreas = 1879, + AllAudibleSmokeAlarmsHardwired = 1884, + AllExteriorDoorsRequireKeyAccessAtNightOrAutomaticallyLock = 2004, + AllGuestRoomDoorsHaveViewports = 2006, + AllGuestRoomDoorsSelfClosing = 2007, + AllParkingAreasPatrolled = 1933, + AllParkingAreasWellLit = 2013, + AllStairsWellsVentilated = 2053, + ArmchairBed = 104126, + AudibleAlarms = 1880, + AudibleSmokeAlarmsInAllHalls = 1881, + AudibleSmokeAlarmsInAllPublicAreas = 1882, + AudibleSmokeAlarmsInAllRooms = 1883, + AudioVisualEquipmentAvailable = 961, + AutolinkFireDepartment = 1886, + AutomatedExternalDefibrillatorOnSiteAED = 1917, + AutomaticFireDoors = 1887, + AutoRecallElevators = 1885, + BalconiesAccessibleToAdjoiningRooms = 1962, + Ballroom = 1609, + Banquet = 1557, + Bar = 1014, + BasicMedicalEquipmentOnSite = 1920, + BathroomsAdaptedForDisabledGuests = 2064, + Beach = 1827, + Beach0To1Km = 1019, + BeautySalon = 1015, + BedroomsWithWheelchairAccess = 2081, + BikesForLoan = 5550, + Bowling = 185105, + BrailleLargePrintHotelLiterature = 2069, + BrailleLargePrintMenus = 2070, + Breakfast = 5807, + Business1 = 1385, + Business2 = 83715, + BusinessCentre = 962, + Cafe = 1381, + CashFree8pmTill6am = 327877, + CashFreeHotel = 345180, + ChildrenWelcome = 1828, + City = 1857, + CoffeeInReceptionAtCharge = 332224, + CoffeeShop = 956, + CoffeeTeaFacilities = 5776, + ColourTVInRoomsAllScandicHotels = 5773, + ComplimentaryColdRefreshments = 157965, + CongressHall = 1558, + ConventionCentre = 963, + Couples = 2663, + DeadboltsOnConnectingDoors = 1990, + DeadboltsSecondaryLocksOnAllGuestRoomDoors = 1985, + Defibrillator = 99872, + Desk = 5777, + DirectDialPhoneInRoomsAllScandic = 5772, + DisabledEmergencyPlan1 = 1888, + DisabledEmergencyPlan2 = 2074, + DisabledParking = 2072, + DiscoNightClub = 958, + DJLiveMusic = 162587, + DO_NOT_USE_Restaurant = 1377, + Downtown = 969, + DrinkableTapWater = 5553, + DVDPlayer = 5778, + EBikesChargingStation = 265711, + ElectronicKeyCards = 1994, + Elevator = 959, + EmergencyBackUpGenerators = 1889, + EmergencyCallButtonOnPhone = 1998, + EmergencyCodesOrButtonsInRooms = 2075, + EmergencyEvacuationPlan1 = 1890, + EmergencyEvacuationPlan2 = 1895, + EmergencyEvaluationDrillFrequency = 1896, + EmergencyInfoInAllRooms = 1897, + EmergencyLightingAllScandic = 952, + EmergencyLightningInAllPublicAreas = 1898, + EmergencyServiceResponseTimeInMinutes = 1899, + Entertainment = 970, + EventVenue = 1559, + ExchangeFacility = 1605, + ExitMapsInRooms = 1900, + ExitSignsLit = 1901, + ExtraFamilyFriendly = 242920, + Families = 2664, + FaxFacilityInRoom = 5764, + Financial = 1409, + FireDetectorsAllScandic = 1869, + FireDetectorsInAllHalls = 1903, + FireDetectorsInAllPublicAreas = 1905, + FireDetectorsInAllRooms = 1906, + FireExtinguishersInAllPublicAreas = 1907, + FireExtinguishersInPublicAreasAllScandic = 1870, + FireSafetyAllScandic = 1871, + FirstAidAvailable = 1915, + FoodDrinks247 = 324100, + FreeWiFi = 1833, + GiftShop = 1376, + Golf = 1016, + GolfCourse0To30Km = 1607, + GuestRoomDoorsHaveASecondLock = 2005, + Gym = 1829, + GymTrainingFacilities = 2669, + Hairdresser = 348860, + HairdryerInRoomAllScandic = 5765, + HandicapFacilities = 2076, + HandrailsInBathrooms = 2078, + HearingInductionLoops = 2077, + Highway1 = 1858, + Highway2 = 1864, + Hiking0To3Km = 239346, + HotelCompliesWithAAASecurityStandards = 2011, + HotelIsFollowingScandicsSafetySecurityPolicy = 5559, + HotelWorksAccordingToScandicsAccessibilityConcepts = 5560, + IceMachine = 1405, + IceMachineReception = 332194, + IDRequiredToReplaceAGuestRoomKey = 2024, + IfNoWhatAreTheHoursUse24ClockEx0000To0600 = 1912, + InCountry = 1867, + IndustrialPark = 1859, + InternetHighSpeedInternetConnectionAllScandic = 5804, + InternetHotSpotsAllScandic = 1832, + IroningRoom = 238849, + IronIroningBoardAllScandic = 5780, + Jacuzzi = 162573, + JacuzziInRoom = 5766, + KayaksForLoan = 162585, + KeyAccessOnlySecuredFloorsAvailable = 2050, + KeyAccessOnlyToHealthClubGym = 2061, + KidsPlayRoom = 239349, + KidsUpToAndIncluding12YearsStayForFree = 5561, + KitchenInRoom = 5767, + Lake0To1Km = 1865, + LakeOrSea0To1Km = 245437, + LaptopSafe = 5283, + LaundryRoom = 326031, + LaundryService = 1834, + LaundryServiceExpress = 162583, + Leisure = 83716, + LifestyleConcierge = 162584, + LuggageLockers = 324098, + Massage = 348859, + MeetingConferenceFacilities = 5806, + MeetingRooms = 1017, + MinibarInRoom = 5768, + MobileLift = 113185, + Mountains0To1Km = 1866, + MovieChannelsInRoomAllScandic = 5770, + MultipleExitsOnEachFloor = 2012, + NonSmokingRoomsAllScandic = 5771, + OnSiteTrainingFacilities = 3014, + OtherExplainInBriefDescription = 1608, + OutdoorTerrace = 1382, + OvernightSecurity = 1913, + ParkingAdditionalCost = 1406, + ParkingAttendant = 1914, + ParkingElectricCharging = 5554, + ParkingFreeParking = 5562, + ParkingGarage = 2665, + ParkingOutdoor = 162574, + PCHookUpInRoom = 5769, + PetFriendlyRooms = 1835, + PillowAlarmsAvailable = 2079, + PlayStationInPlayArea = 175449, + Pool = 1831, + PoolSwimmingPoolJacuzziAtHotel = 2667, + PrintingService = 1380, + PropertyMeetsRequirementsFireSafety = 1875, + PublicAddressSystem = 2014, + RelaxationSuite = 5564, + Restaurant = 1383, + RestrictedRoomAccessAllScandic = 1872, + RooftopBar = 239348, + RoomsAccessibleFromTheInterior = 950, + RoomService = 1378, + RoomWindowsOpen = 2016, + RoomWindowsThatOpenHaveLockingDevice = 2020, + Rural1 = 1861, + Rural2 = 1868, + SafeDepositBoxInRoomsAllScandic = 5775, + SafeDepositBoxInRoomsCanHoldA17InchLaptop = 200124, + SafeDepositBoxInRoomsCannotHoldALaptop = 200123, + SafetyChainsOnGuestRoomDoor = 2047, + Sauna = 1379, + ScandicShop24Hrs = 1408, + SecondaryLocksOnSlidingGlassDoors = 2048, + SecondaryLocksOnWindows = 2049, + Security24Hours = 1911, + SecurityEscortsAvailableOnRequest = 1936, + SecurityPersonnelOnSite = 1934, + SeparateFloorsForWomen = 2051, + ServesBreakfastAlwaysIncluded = 1407, + ServesBreakfastNotAlwaysIncluded = 5556, + ServesOrganicBreakfastAlwaysIncluded = 5557, + ServesOrganicBreakfastNotAlwaysIncluded = 5558, + ServiceGuideDogsAllowed = 2071, + ServiceSecurity24Hrs = 326033, + Shopping = 971, + SkateboardsForLoan = 162586, + Skiing0To1Km = 245031, + Skybar = 1606, + SmokeDetectorsAllScandic = 1873, + Solarium = 1830, + SpecialNeedsMenus = 2082, + Sports = 83717, + SprinklersAllScandic = 1874, + SprinklersInAllHalls = 1908, + SprinklersInAllPublicAreas = 1909, + SprinklersInAllRooms = 1910, + StaffInDuplicateKeys = 1942, + StaffRedCrossCertifiedInCPR = 1941, + StaffTrainedForDisabledGuests = 1928, + StaffTrainedInAutomatedExternalDefibrillatorUsageAED = 1940, + StaffTrainedInCPR = 1923, + StaffTrainedInFirstAid = 1939, + StaffTrainedInFirstAidTechniques = 951, + StaffTrainedToCaterForDisabledGuestsAllScandic = 2073, + Suburbs = 1860, + SwingboltLock = 2052, + TeleConferencingFacilitiesAvailable = 1018, + TelevisionsWithSubtitlesOrClosedCaptions = 2083, + Tennis1 = 1836, + Tennis2 = 1838, + TennisPadel = 239350, + Theatre = 1862, + TrouserPress = 5779, + TVWithChromecast1 = 229127, + TVWithChromecast2 = 229144, + UniformSecurityOnPremises = 1935, + UtilityRoomForIroning = 324097, + VendingMachineWithNecessities = 324099, + VideoSurveillanceInHallways = 2056, + VideoSurveillanceInPublicAreas = 1386, + VideoSurveillanceMonitored24HrsADay = 2058, + VideoSurveillanceOfAllParkingAreas = 2055, + VideoSurveillanceOfExteriorFrontEntrance = 2054, + VideoSurveillanceRecorded24HrsADayParkingArea = 2059, + WallMountedCycleRack = 199642, + WellLitWalkways = 2060, + WellnessAndSaunaEntranceFeeAdmission16PlusYears = 267806, + WellnessPoolSaunaEntranceFeeAdmission16PlusYears = 307754, + WheelchairAccess = 2084, + WideCorridors = 2086, + WideEntrance = 2085, + WideRestaurantEntrance = 2087, + WiFiWirelessInternetAccessAllScandic = 5774, +} diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index dd8c0a1a4..2ff48b946 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -10,12 +10,12 @@ import { type Facilities, type FacilityCard, type FacilityCardType, - FacilityEnum, + FacilityCardTypeEnum, type FacilityGrid, - FacilityIds, type FacilityImage, RestaurantHeadings, } from "@/types/components/hotelPage/facilities" +import { FacilityEnum } from "@/types/enums/facilities" import type { Amenities, Facility } from "@/types/hotel" import type { CardProps } from "@/components/TempDesignSystem/Card/card" @@ -72,7 +72,7 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities { }) switch (facility.id) { - case FacilityEnum.wellness: + case FacilityCardTypeEnum.wellness: card = setCardProps( "one", "Sauna and gym", @@ -83,7 +83,7 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities { grid.unshift(card) break - case FacilityEnum.conference: + case FacilityCardTypeEnum.conference: card = setCardProps( "primaryDim", "Events that make an impression", @@ -94,7 +94,7 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities { grid.push(card) break - case FacilityEnum.restaurant: + case FacilityCardTypeEnum.restaurant: //const title = getRestaurantHeading(amenities) // TODO will be used later card = setCardProps( "primaryDark", @@ -114,10 +114,12 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities { export function getRestaurantHeading(amenities: Amenities): RestaurantHeadings { const hasBar = amenities.some( (facility) => - facility.id === FacilityIds.bar || facility.id === FacilityIds.rooftopBar + facility.id === FacilityEnum.Bar || + facility.id === FacilityEnum.RooftopBar || + facility.id === FacilityEnum.Skybar ) const hasRestaurant = amenities.some( - (facility) => facility.id === FacilityIds.restaurant + (facility) => facility.id === FacilityEnum.Restaurant ) if (hasBar && hasRestaurant) {