From 554b73696d747747e6b4d69bc313d51eb359cb5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20Landstr=C3=B6m?= Date: Tue, 21 Jan 2025 10:25:55 +0000 Subject: [PATCH] Merged in feat/SW-1001-multiple-activity-cards (pull request #1191) Feat(SW-1001): Multiple activity cards on hotel page * chore(SW-1001): render all activity cards * chore(SW-1001): add sidepeek CTA text to CS * feat(SW-1001): add slug from CS Approved-by: Erik Tiekstra Approved-by: Fredrik Thorsson --- .../Facilities/CardGrid/ActivitiesCardGrid.tsx | 4 ++-- .../ContentType/HotelPage/Facilities/index.tsx | 9 +++++++-- .../HotelPage/SidePeeks/Activities/index.tsx | 6 ++++-- components/ContentType/HotelPage/index.tsx | 15 +++++++++------ i18n/dictionaries/da.json | 1 - i18n/dictionaries/de.json | 1 - i18n/dictionaries/en.json | 1 - i18n/dictionaries/fi.json | 1 - i18n/dictionaries/no.json | 1 - i18n/dictionaries/sv.json | 1 - lib/graphql/Query/HotelPage/HotelPage.graphql | 2 ++ server/routers/contentstack/hotelPage/output.ts | 7 ++++--- .../contentstack/schemas/blocks/activitiesCard.ts | 4 ++++ types/components/hotelPage/facilities.ts | 4 ++-- types/components/hotelPage/sidepeek/activities.ts | 2 ++ 15 files changed, 36 insertions(+), 23 deletions(-) diff --git a/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx b/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx index d7a2540bf..46474c664 100644 --- a/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx +++ b/components/ContentType/HotelPage/Facilities/CardGrid/ActivitiesCardGrid.tsx @@ -20,7 +20,7 @@ export default function ActivitiesCardGrid(activitiesCard: ActivityCard) { theme: hasImage ? "image" : "primaryDark", primaryButton: hasImage ? { - href: `#s-${activities[lang]}`, + href: `#s-${activitiesCard.sidepeekSlug}`, title: activitiesCard.ctaText, isExternal: false, scrollOnClick: false, @@ -29,7 +29,7 @@ export default function ActivitiesCardGrid(activitiesCard: ActivityCard) { secondaryButton: hasImage ? undefined : { - href: `#s-${activities[lang]}`, + href: `#s-${activitiesCard.sidepeekSlug}`, title: activitiesCard.ctaText, isExternal: false, scrollOnClick: false, diff --git a/components/ContentType/HotelPage/Facilities/index.tsx b/components/ContentType/HotelPage/Facilities/index.tsx index 52908b84d..372613f5b 100644 --- a/components/ContentType/HotelPage/Facilities/index.tsx +++ b/components/ContentType/HotelPage/Facilities/index.tsx @@ -16,9 +16,9 @@ import type { export default async function Facilities({ facilities, - activitiesCard, amenities, healthFacilities, + activitiesCards, }: FacilitiesProps) { const intl = await getIntl() @@ -56,7 +56,12 @@ export default async function Facilities({ facilitiesCardGrid={cardGrid} /> ))} - {activitiesCard && } + {activitiesCards.map((card) => ( + + ))} ) } diff --git a/components/ContentType/HotelPage/SidePeeks/Activities/index.tsx b/components/ContentType/HotelPage/SidePeeks/Activities/index.tsx index 573cdfc8e..10829456a 100644 --- a/components/ContentType/HotelPage/SidePeeks/Activities/index.tsx +++ b/components/ContentType/HotelPage/SidePeeks/Activities/index.tsx @@ -13,20 +13,22 @@ import type { ActivitiesSidePeekProps } from "@/types/components/hotelPage/sidep export default async function ActivitiesSidePeek({ contentPage, + sidepeekCTA, + sidepeekSlug, }: ActivitiesSidePeekProps) { const lang = getLang() const intl = await getIntl() const { href, preamble } = contentPage return ( {preamble}
diff --git a/components/ContentType/HotelPage/index.tsx b/components/ContentType/HotelPage/index.tsx index 606192895..32ae7c9f0 100644 --- a/components/ContentType/HotelPage/index.tsx +++ b/components/ContentType/HotelPage/index.tsx @@ -85,7 +85,7 @@ export default async function HotelPage({ hotelId }: HotelPageProps) { const images = gallery?.smallerImages const description = hotelContent.texts.descriptions.medium - const { spaPage, activitiesCard } = content + const { spaPage, activitiesCards } = content const facilities: Facility[] = [ { @@ -140,7 +140,7 @@ export default async function HotelPage({ hotelId }: HotelPageProps) { 0} hasFAQ={!!faq.accordions.length} /> @@ -173,7 +173,7 @@ export default async function HotelPage({ hotelId }: HotelPageProps) { @@ -220,11 +220,14 @@ export default async function HotelPage({ hotelId }: HotelPageProps) { spaPage={spaPage?.spa_page} /> - {activitiesCard && ( + {activitiesCards.map((card) => ( - )} + ))} { let spaPage: SpaPage | undefined - let activitiesCard: ActivitiesCard | undefined + let activitiesCards: ActivitiesCard[] = [] + data?.map((block) => { switch (block.typename) { case HotelPageEnum.ContentStack.blocks.ActivitiesCard: - activitiesCard = block + activitiesCards.push(block) break case HotelPageEnum.ContentStack.blocks.SpaPage: spaPage = block @@ -54,7 +55,7 @@ export const hotelPageSchema = z.object({ break } }) - return { spaPage, activitiesCard } + return { spaPage, activitiesCards } }), faq: hotelFaqSchema, hotel_page_id: z.string(), diff --git a/server/routers/contentstack/schemas/blocks/activitiesCard.ts b/server/routers/contentstack/schemas/blocks/activitiesCard.ts index 22be43b46..9c1f42a51 100644 --- a/server/routers/contentstack/schemas/blocks/activitiesCard.ts +++ b/server/routers/contentstack/schemas/blocks/activitiesCard.ts @@ -18,8 +18,10 @@ export const activitiesCardSchema = z.object({ background_image: tempImageVaultAssetSchema, body_text: z.string(), cta_text: z.string(), + sidepeek_cta_text: z.string(), heading: z.string(), scripted_title: z.string().optional(), + sidepeek_slug: z.string(), hotel_page_activities_content_pageConnection: z.object({ edges: z.array( z.object({ @@ -53,6 +55,8 @@ export const activitiesCardSchema = z.object({ bodyText: data.body_text, contentPage, ctaText: data.cta_text, + sidepeekCtaText: data.sidepeek_cta_text, + sidepeekSlug: data.sidepeek_slug, heading: data.heading, scriptedTopTitle: data.scripted_title, } diff --git a/types/components/hotelPage/facilities.ts b/types/components/hotelPage/facilities.ts index 13a1047bd..9080843e6 100644 --- a/types/components/hotelPage/facilities.ts +++ b/types/components/hotelPage/facilities.ts @@ -1,10 +1,10 @@ import type { Amenities, Facility, HealthFacilities } from "@/types/hotel" -import type { ActivityCard } from "@/types/trpc/routers/contentstack/hotelPage" +import type { ActivitiesCard } from "@/types/trpc/routers/contentstack/hotelPage" import type { CardProps } from "@/components/TempDesignSystem/Card/card" export type FacilitiesProps = { facilities: Facility[] - activitiesCard?: ActivityCard + activitiesCards: ActivitiesCard[] amenities: Amenities healthFacilities: HealthFacilities } diff --git a/types/components/hotelPage/sidepeek/activities.ts b/types/components/hotelPage/sidepeek/activities.ts index 60e2b3357..34723e202 100644 --- a/types/components/hotelPage/sidepeek/activities.ts +++ b/types/components/hotelPage/sidepeek/activities.ts @@ -3,4 +3,6 @@ export type ActivitiesSidePeekProps = { href: string preamble: string } + sidepeekCTA: string + sidepeekSlug: string }