feat(SW-938) Added icon to roomFacilitiesSchema and detailedFacilitySchema
This commit is contained in:
@@ -13,8 +13,14 @@
|
|||||||
font-family: var(--typography-Body-Regular-fontFamily);
|
font-family: var(--typography-Body-Regular-fontFamily);
|
||||||
border-bottom: 1px solid var(--Base-Border-Subtle);
|
border-bottom: 1px solid var(--Base-Border-Subtle);
|
||||||
/* padding set to align with AccordionItem which has a different composition */
|
/* padding set to align with AccordionItem which has a different composition */
|
||||||
padding: var(--Spacing-x2)
|
padding: calc(var(--Spacing-x1) + var(--Spacing-x-one-and-half))
|
||||||
calc(var(--Spacing-x1) + var(--Spacing-x-one-and-half));
|
var(--Spacing-x3);
|
||||||
|
display: flex;
|
||||||
|
gap: var(--Spacing-x1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.noIcon {
|
||||||
|
margin-left: var(--Spacing-x4);
|
||||||
}
|
}
|
||||||
|
|
||||||
.list {
|
.list {
|
||||||
|
|||||||
@@ -8,12 +8,15 @@ import SidePeek from "@/components/TempDesignSystem/SidePeek"
|
|||||||
import Body from "@/components/TempDesignSystem/Text/Body"
|
import Body from "@/components/TempDesignSystem/Text/Body"
|
||||||
import Subtitle from "@/components/TempDesignSystem/Text/Subtitle"
|
import Subtitle from "@/components/TempDesignSystem/Text/Subtitle"
|
||||||
|
|
||||||
|
import { getFacilityIcon } from "../RoomSidePeek/facilityIcon"
|
||||||
|
|
||||||
import styles from "./hotelSidePeek.module.css"
|
import styles from "./hotelSidePeek.module.css"
|
||||||
|
|
||||||
import { HotelSidePeekProps } from "@/types/components/hotelReservation/hotelSidePeek"
|
import type { HotelSidePeekProps } from "@/types/components/hotelReservation/hotelSidePeek"
|
||||||
import { ParkingProps } from "@/types/components/hotelReservation/selectHotel/selectHotel"
|
import type { ParkingProps } from "@/types/components/hotelReservation/selectHotel/selectHotel"
|
||||||
import { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
import { SidePeekEnum } from "@/types/components/hotelReservation/sidePeek"
|
||||||
import { Amenities, Hotel } from "@/types/hotel"
|
import { IconName } from "@/types/components/icon"
|
||||||
|
import type { Amenities, Hotel } from "@/types/hotel"
|
||||||
|
|
||||||
function getAmenitiesList(hotel: Hotel) {
|
function getAmenitiesList(hotel: Hotel) {
|
||||||
const detailedAmenities: Amenities = hotel.detailedFacilities.filter(
|
const detailedAmenities: Amenities = hotel.detailedFacilities.filter(
|
||||||
@@ -46,7 +49,10 @@ export default function HotelSidePeek({
|
|||||||
<Accordion>
|
<Accordion>
|
||||||
{/* parking */}
|
{/* parking */}
|
||||||
{hotel.parking.length ? (
|
{hotel.parking.length ? (
|
||||||
<AccordionItem title={intl.formatMessage({ id: "Parking" })}>
|
<AccordionItem
|
||||||
|
title={intl.formatMessage({ id: "Parking" })}
|
||||||
|
icon={IconName.Parking}
|
||||||
|
>
|
||||||
{hotel.parking.map((p) => (
|
{hotel.parking.map((p) => (
|
||||||
<Parking key={p.name} parking={p} />
|
<Parking key={p.name} parking={p} />
|
||||||
))}
|
))}
|
||||||
@@ -56,9 +62,19 @@ export default function HotelSidePeek({
|
|||||||
{intl.formatMessage({ id: "Accessibility" })}
|
{intl.formatMessage({ id: "Accessibility" })}
|
||||||
</div>
|
</div>
|
||||||
{amenitiesList.map((amenity) => {
|
{amenitiesList.map((amenity) => {
|
||||||
|
const Icon = getFacilityIcon(amenity.icon)
|
||||||
return (
|
return (
|
||||||
<div key={amenity.id} className={styles.amenity}>
|
<div key={amenity.id} className={styles.amenity}>
|
||||||
{amenity.name}
|
{Icon && (
|
||||||
|
<Icon width={24} height={24} color="uiTextMediumContrast" />
|
||||||
|
)}
|
||||||
|
<Body
|
||||||
|
asChild
|
||||||
|
className={!Icon ? styles.noIcon : undefined}
|
||||||
|
color="uiTextMediumContrast"
|
||||||
|
>
|
||||||
|
<span>{amenity.name}</span>
|
||||||
|
</Body>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
|
|||||||
@@ -56,10 +56,16 @@ export default function RoomSidePeek({
|
|||||||
{room.roomFacilities
|
{room.roomFacilities
|
||||||
.sort((a, b) => a.sortOrder - b.sortOrder)
|
.sort((a, b) => a.sortOrder - b.sortOrder)
|
||||||
.map((facility) => {
|
.map((facility) => {
|
||||||
const Icon = getFacilityIcon(facility.name)
|
const Icon = getFacilityIcon(facility.icon)
|
||||||
return (
|
return (
|
||||||
<li key={facility.name}>
|
<li key={facility.name}>
|
||||||
{Icon && <Icon color="uiTextMediumContrast" />}
|
{Icon && (
|
||||||
|
<Icon
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
color="uiTextMediumContrast"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
<Body
|
<Body
|
||||||
asChild
|
asChild
|
||||||
className={!Icon ? styles.noIcon : undefined}
|
className={!Icon ? styles.noIcon : undefined}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: var(--Spacing-x-one-and-half) var(--Spacing-x2);
|
gap: var(--Spacing-x-one-and-half) var(--Spacing-x1);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: var(--Base-Text-High-contrast);
|
color: var(--Base-Text-High-contrast);
|
||||||
font-family: var(--typography-Body-Bold-fontFamily);
|
font-family: var(--typography-Body-Bold-fontFamily);
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ const detailedFacilitySchema = z.object({
|
|||||||
public: z.boolean(),
|
public: z.boolean(),
|
||||||
sortOrder: z.number(),
|
sortOrder: z.number(),
|
||||||
filter: z.string().optional(),
|
filter: z.string().optional(),
|
||||||
|
icon: z.string(),
|
||||||
})
|
})
|
||||||
|
|
||||||
export const facilitySchema = z.object({
|
export const facilitySchema = z.object({
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ const roomFacilitiesSchema = z.object({
|
|||||||
name: z.string(),
|
name: z.string(),
|
||||||
isUniqueSellingPoint: z.boolean(),
|
isUniqueSellingPoint: z.boolean(),
|
||||||
sortOrder: z.number(),
|
sortOrder: z.number(),
|
||||||
|
icon: z.string(),
|
||||||
})
|
})
|
||||||
|
|
||||||
export const roomSchema = z
|
export const roomSchema = z
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ export type Filter = {
|
|||||||
public: boolean
|
public: boolean
|
||||||
sortOrder: number
|
sortOrder: number
|
||||||
filter?: string
|
filter?: string
|
||||||
|
icon: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export type HotelFilterModalProps = {
|
export type HotelFilterModalProps = {
|
||||||
|
|||||||
Reference in New Issue
Block a user