From 2e655619d16c970a5a23cf1aad13eb3bdffa5b39 Mon Sep 17 00:00:00 2001
From: Erik Tiekstra
Date: Thu, 28 Aug 2025 13:46:48 +0000
Subject: [PATCH] feat(SW-3121): Added support for campaign text inside the
hero of campaign pages
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix: making sure the cacheKey for getHotelsByHotelIds is not sorting the original array
Approved-by: Matilda Landström
---
.../CampaignPage/Hero/hero.module.css | 17 ++++++++++----
.../ContentType/CampaignPage/Hero/index.tsx | 22 +++++++++++++++++--
.../Fragments/CampaignPage/Hero.graphql | 4 ++++
.../contentstack/campaignPage/output.ts | 20 ++++++++++++++++-
packages/trpc/lib/routers/hotels/utils.ts | 2 +-
5 files changed, 57 insertions(+), 8 deletions(-)
diff --git a/apps/scandic-web/components/ContentType/CampaignPage/Hero/hero.module.css b/apps/scandic-web/components/ContentType/CampaignPage/Hero/hero.module.css
index 20b22f7fc..0f31b4a95 100644
--- a/apps/scandic-web/components/ContentType/CampaignPage/Hero/hero.module.css
+++ b/apps/scandic-web/components/ContentType/CampaignPage/Hero/hero.module.css
@@ -33,11 +33,14 @@
background-color: var(--Surface-Brand-Accent-Default);
}
- .heading {
+ .heading,
+ .highlight,
+ .rateText {
color: var(--Text-Brand-OnAccent-Heading);
}
- .text {
+ .text,
+ .campaignText {
color: var(--Text-Brand-OnPrimary-1-Default);
}
@@ -51,12 +54,18 @@
background-color: var(--Surface-Brand-Primary-3-Default);
}
- .heading {
+ .highlight {
+ color: var(--Text-Brand-OnPrimary-3-Heading);
+ }
+
+ .heading,
+ .rateText {
color: var(--Text-Brand-OnPrimary-3-Accent);
}
.benefitList > li,
- .text {
+ .text,
+ .campaignText {
color: var(--Text-Brand-OnPrimary-3-Default);
}
}
diff --git a/apps/scandic-web/components/ContentType/CampaignPage/Hero/index.tsx b/apps/scandic-web/components/ContentType/CampaignPage/Hero/index.tsx
index c111bcb1a..6cb71ee7a 100644
--- a/apps/scandic-web/components/ContentType/CampaignPage/Hero/index.tsx
+++ b/apps/scandic-web/components/ContentType/CampaignPage/Hero/index.tsx
@@ -25,6 +25,7 @@ export default async function CampaignHero({
heading,
benefits,
rate_text,
+ campaign_text,
button,
theme,
pageType = "campaign",
@@ -73,6 +74,23 @@ export default async function CampaignHero({
))}
) : null}
+ {pageType === "campaign" && campaign_text ? (
+
+ {campaign_text.text ? (
+
+ {campaign_text.text}
+
+ ) : null}
+ {campaign_text.bold_text && campaign_text.text ? " " : null}
+ {campaign_text.bold_text ? (
+
+
+ {campaign_text.bold_text}
+
+
+ ) : null}
+
+ ) : null}
{rate_text ? (
-
+
{rate_text.bold_text ? (
{rate_text.bold_text}
@@ -93,7 +111,7 @@ export default async function CampaignHero({
{rate_text.text}
) : null}
-
+
) : null}
{button ? (
{
+ if (data?.bold_text || data?.text) {
+ return data
+ }
+ return null
+ }),
+ campaign_text: z
+ .object({
+ text: z.string().nullish(),
+ bold_text: z.string().nullish(),
+ })
+ .nullish()
+ .transform((data) => {
+ if (data?.bold_text || data?.text) {
+ return data
+ }
+ return null
+ }),
button: z
.intersection(z.object({ cta: z.string() }), linkConnectionSchema)
.transform((data) => {
diff --git a/packages/trpc/lib/routers/hotels/utils.ts b/packages/trpc/lib/routers/hotels/utils.ts
index 427b19b07..4caaee74b 100644
--- a/packages/trpc/lib/routers/hotels/utils.ts
+++ b/packages/trpc/lib/routers/hotels/utils.ts
@@ -359,7 +359,7 @@ export async function getHotelsByHotelIds({
contentType?: "hotel" | "restaurant" | "meeting"
}) {
const cacheClient = await getCacheClient()
- const cacheKey = `${lang}:getHotelsByHotelIds:hotels:${contentType}:${hotelIds.sort().join(",")}`
+ const cacheKey = `${lang}:getHotelsByHotelIds:hotels:${contentType}:${[...hotelIds].sort().join(",")}`
return await cacheClient.cacheOrGet(
cacheKey,