- {imageCards.map(
+ {imageCards?.map(
({ backgroundImage }) =>
backgroundImage && (
{
- card?: CardProps
- imageCards: Pick[]
+ card: FacilityCard | CardProps
+ imageCards?: FacilityImage[]
}
diff --git a/types/components/hotelPage/facilities.ts b/types/components/hotelPage/facilities.ts
index 41308837f..98a6a444d 100644
--- a/types/components/hotelPage/facilities.ts
+++ b/types/components/hotelPage/facilities.ts
@@ -2,17 +2,36 @@ import type { Facility } from "@/types/hotel"
import type { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage"
import type { CardProps } from "@/components/TempDesignSystem/Card/card"
-export type FacilityCards = CardProps[]
-
-export type Facilities = FacilityCards[]
-
export type FacilitiesProps = {
facilities: Facility[]
activitiesCard?: ActivityCard
}
+export type FacilityImage = {
+ backgroundImage: CardProps["backgroundImage"]
+ theme: CardProps["theme"]
+ id: string
+}
+
+export type FacilityCard = {
+ secondaryButton: {
+ href: string
+ title: string
+ openInNewTab?: boolean
+ isExternal: boolean
+ }
+ heading: string
+ scriptedTopTitle: string
+ theme: CardProps["theme"]
+ id: string
+}
+
+export type FacilityCardType = FacilityImage | FacilityCard
+export type FacilityGrid = FacilityCardType[]
+export type Facilities = FacilityGrid[]
+
export type CardGridProps = {
- facilityCardGid: FacilityCards
+ facilitiesCardGrid: FacilityGrid
}
export enum FacilityEnum {
diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts
index 82b859b8b..eb002c93b 100644
--- a/utils/facilityCards.ts
+++ b/utils/facilityCards.ts
@@ -1,5 +1,4 @@
import {
- activities,
meetingsAndConferences,
restaurantAndBar,
wellnessAndExercise,
@@ -9,60 +8,43 @@ import { getLang } from "@/i18n/serverContext"
import {
type Facilities,
+ type FacilityCard,
+ type FacilityCardType,
FacilityEnum,
+ type FacilityGrid,
FacilityIds,
+ type FacilityImage,
RestaurantHeadings,
} from "@/types/components/hotelPage/facilities"
import type { Amenities, Facility } from "@/types/hotel"
-import { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage"
import type { CardProps } from "@/components/TempDesignSystem/Card/card"
-export function setActivityCard(activitiesCard: ActivityCard): CardProps {
- const lang = getLang()
- const hasImage = activitiesCard.background_image
+export function isFacilityCard(card: FacilityCardType): card is FacilityCard {
+ return (card as FacilityCard).heading != undefined
+}
- const updatedCard: CardProps = {
- id: activities[lang],
- theme: hasImage ? "image" : "primaryDark",
- scriptedTopTitle: activitiesCard.scripted_title,
- heading: activitiesCard.heading,
- bodyText: activitiesCard.body_text,
- backgroundImage: hasImage ? activitiesCard.background_image : undefined,
- primaryButton: hasImage
- ? {
- href: activitiesCard.contentPage.href,
- title: activitiesCard.cta_text,
- isExternal: false,
- }
- : undefined,
- secondaryButton: hasImage
- ? undefined
- : {
- href: activitiesCard.contentPage.href,
- title: activitiesCard.cta_text,
- isExternal: false,
- },
- }
- return updatedCard
+export function isFacilityImage(card: FacilityCardType): card is FacilityCard {
+ return (card as FacilityImage).backgroundImage != undefined
}
function setCardProps(
theme: CardProps["theme"],
heading: string,
buttonText: string,
- href: string
-) {
- const card: CardProps = {}
-
- card.theme = theme
- card.id = href
- card.heading = heading
- card.secondaryButton = {
- href: `?s=${href}`,
- title: buttonText,
- isExternal: false,
+ href: string,
+ scriptedTopTitle: string
+): FacilityCard {
+ return {
+ theme: theme,
+ id: href,
+ heading: heading,
+ scriptedTopTitle: scriptedTopTitle,
+ secondaryButton: {
+ href: `?s=${href}`,
+ title: buttonText,
+ isExternal: false,
+ },
}
- return card
}
export function setFacilityCardGrids(facilities: Facility[]): Facilities {
@@ -70,23 +52,24 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities {
const cards: Facilities = []
facilities.forEach(async (facility) => {
- const grid: Array = []
- let card: CardProps = {}
+ const grid: FacilityGrid = []
+ let card: FacilityCard
facility.heroImages.slice(0, 2).forEach((image) => {
// Can be a maximum 2 images per grid
- const img: CardProps = {}
- img.id = image.imageSizes.large
- ;(img.backgroundImage = {
- url: image.imageSizes.large,
- title: image.metaData.title,
- meta: {
- alt: image.metaData.altText,
- caption: image.metaData.altText_En,
+ const img: FacilityImage = {
+ backgroundImage: {
+ url: image.imageSizes.large,
+ title: image.metaData.title,
+ meta: {
+ alt: image.metaData.altText,
+ caption: image.metaData.altText_En,
+ },
+ id: image.imageSizes.large,
},
+ theme: "image",
id: image.imageSizes.large,
- }),
- (img.theme = "image")
+ }
grid.push(img)
})
@@ -96,9 +79,9 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities {
"one",
"Sauna and gym",
"Read more about wellness & exercise",
- wellnessAndExercise[lang]
+ wellnessAndExercise[lang],
+ facility.headingText
)
- card.scriptedTopTitle = facility.headingText
grid.unshift(card)
break
@@ -107,9 +90,9 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities {
"primaryDim",
"Events that make an impression",
"About meetings & conferences",
- meetingsAndConferences[lang]
+ meetingsAndConferences[lang],
+ facility.headingText
)
- card.scriptedTopTitle = facility.headingText
grid.push(card)
break
@@ -119,9 +102,9 @@ export function setFacilityCardGrids(facilities: Facility[]): Facilities {
"primaryDark",
"Enjoy relaxed restaurant experiences",
"Read more & book a table",
- restaurantAndBar[lang]
+ restaurantAndBar[lang],
+ facility.headingText
)
- card.scriptedTopTitle = facility.headingText
grid.unshift(card)
break
}
diff --git a/utils/imageCard.ts b/utils/imageCard.ts
index 84a75da18..ae646fb76 100644
--- a/utils/imageCard.ts
+++ b/utils/imageCard.ts
@@ -1,16 +1,27 @@
-import type { FacilityCards } from "@/types/components/hotelPage/facilities"
-import type { CardProps } from "@/components/TempDesignSystem/Card/card"
+import { isFacilityImage } from "./facilityCards"
-export function sortCards(cards: FacilityCards) {
- const sortedCards = cards.slice(0).sort((a: CardProps, b: CardProps) => {
- if (!a.backgroundImage && b.backgroundImage) {
- return 1
- }
- if (a.backgroundImage && !b.backgroundImage) {
- return -1
- }
- return 0
- })
+import type {
+ FacilityCard,
+ FacilityCardType,
+ FacilityGrid,
+ FacilityImage,
+} from "@/types/components/hotelPage/facilities"
- return { card: sortedCards.pop(), images: sortedCards }
+export function sortCards(cards: FacilityGrid) {
+ const sortedCards = cards
+ .slice(0)
+ .sort((a: FacilityCardType, b: FacilityCardType) => {
+ if (!isFacilityImage(a) && isFacilityImage(b)) {
+ return 1
+ }
+ if (isFacilityImage(a) && !isFacilityImage(b)) {
+ return -1
+ }
+ return 0
+ })
+
+ return {
+ card: sortedCards.pop() as FacilityCard,
+ images: sortedCards as FacilityImage[],
+ }
}