From 8ecaac4b52a4cbe5824c166f92aedb95e728e3a5 Mon Sep 17 00:00:00 2001 From: Erik Tiekstra Date: Thu, 6 Feb 2025 09:19:59 +0000 Subject: [PATCH] Merged in fix/hotel-faq (pull request #1265) fix: setting faq section as nullable from CS as CS returns null after import * fix: setting faq section as nullable from CS as CS returns null after import Approved-by: Fredrik Thorsson --- components/ContentType/HotelPage/index.tsx | 4 +- .../routers/contentstack/hotelPage/output.ts | 2 +- server/routers/hotels/query.ts | 2 +- utils/facilityCards.ts | 116 +++++++++--------- 4 files changed, 64 insertions(+), 60 deletions(-) diff --git a/components/ContentType/HotelPage/index.tsx b/components/ContentType/HotelPage/index.tsx index 5a9b1b94f..ead1a176a 100644 --- a/components/ContentType/HotelPage/index.tsx +++ b/components/ContentType/HotelPage/index.tsx @@ -150,7 +150,7 @@ export default async function HotelPage({ hotelId }: HotelPageProps) { 0} - hasFAQ={!!faq.accordions.length} + hasFAQ={!!faq?.accordions.length} tabValues={tabValues} /> @@ -187,7 +187,7 @@ export default async function HotelPage({ hotelId }: HotelPageProps) { amenities={detailedFacilities} healthFacilities={healthFacilities} /> - {faq.accordions.length > 0 && ( + {faq && faq.accordions.length > 0 && ( )} diff --git a/server/routers/contentstack/hotelPage/output.ts b/server/routers/contentstack/hotelPage/output.ts index 4dde9a4a6..9ba8f7d02 100644 --- a/server/routers/contentstack/hotelPage/output.ts +++ b/server/routers/contentstack/hotelPage/output.ts @@ -70,7 +70,7 @@ export const hotelPageSchema = z.object({ }) return { spaPage, activitiesCards } }), - faq: hotelFaqSchema, + faq: hotelFaqSchema.nullable(), hotel_page_id: z.string(), title: z.string(), url: z.string(), diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 8922c359e..2ca875de4 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -1240,7 +1240,7 @@ export const hotelQueryRouter = router({ }, }) ) - return null + return [] } const apiJson = await apiResponse.json() diff --git a/utils/facilityCards.ts b/utils/facilityCards.ts index 6f6d8ede2..cd49844d3 100644 --- a/utils/facilityCards.ts +++ b/utils/facilityCards.ts @@ -57,65 +57,69 @@ export function setFacilityCardGrids( ): Facilities { const lang = getLang() - const cards: Facilities = facilities.map((facility) => { - let card: FacilityCard + const cards: Facilities = facilities + .filter((fac) => !!fac.headingText) + .map((facility) => { + let card: FacilityCard - const grid: FacilityGrid = facility.heroImages.slice(0, 2).map((image) => { - // Can be a maximum 2 images per grid - 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, + const grid: FacilityGrid = facility.heroImages + .slice(0, 2) + .map((image) => { + // Can be a maximum 2 images per grid + 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, + } + return img + }) + + switch (facility.id) { + case FacilityCardTypeEnum.wellness: + const wellnessTitle = getWellnessHeading(healthFacilities) + card = setCardProps( + "one", + "Read more about wellness & exercise", + wellnessAndExercise[lang], + facility.headingText, + wellnessTitle + ) + grid.unshift(card) + break + + case FacilityCardTypeEnum.conference: + card = setCardProps( + "primaryDim", + "About meetings & conferences", + meetingsAndConferences[lang], + facility.headingText, + "Events that make an impression" + ) + grid.push(card) + break + + case FacilityCardTypeEnum.restaurant: + const restaurantTitle = getRestaurantHeading(amenities) + card = setCardProps( + "primaryDark", + "Read more & book a table", + restaurantAndBar[lang], + facility.headingText, + restaurantTitle + ) + grid.unshift(card) + break } - return img + return grid }) - - switch (facility.id) { - case FacilityCardTypeEnum.wellness: - const wellnessTitle = getWellnessHeading(healthFacilities) - card = setCardProps( - "one", - "Read more about wellness & exercise", - wellnessAndExercise[lang], - facility.headingText, - wellnessTitle - ) - grid.unshift(card) - break - - case FacilityCardTypeEnum.conference: - card = setCardProps( - "primaryDim", - "About meetings & conferences", - meetingsAndConferences[lang], - facility.headingText, - "Events that make an impression" - ) - grid.push(card) - break - - case FacilityCardTypeEnum.restaurant: - const restaurantTitle = getRestaurantHeading(amenities) - card = setCardProps( - "primaryDark", - "Read more & book a table", - restaurantAndBar[lang], - facility.headingText, - restaurantTitle - ) - grid.unshift(card) - break - } - return grid - }) return cards }