- {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
-
diff --git a/apps/scandic-web/lib/graphql/Fragments/CampaignPage/Hero.graphql b/apps/scandic-web/lib/graphql/Fragments/CampaignPage/Hero.graphql
new file mode 100644
index 000000000..0e1bfa18d
--- /dev/null
+++ b/apps/scandic-web/lib/graphql/Fragments/CampaignPage/Hero.graphql
@@ -0,0 +1,78 @@
+#import "../PageLink/AccountPageLink.graphql"
+#import "../PageLink/CampaignPageLink.graphql"
+#import "../PageLink/CollectionPageLink.graphql"
+#import "../PageLink/ContentPageLink.graphql"
+#import "../PageLink/DestinationCityPageLink.graphql"
+#import "../PageLink/DestinationCountryPageLink.graphql"
+#import "../PageLink/DestinationOverviewPageLink.graphql"
+#import "../PageLink/HotelPageLink.graphql"
+#import "../PageLink/LoyaltyPageLink.graphql"
+#import "../PageLink/StartPageLink.graphql"
+
+#import "../AccountPage/Ref.graphql"
+#import "../CampaignPage/Ref.graphql"
+#import "../CollectionPage/Ref.graphql"
+#import "../ContentPage/Ref.graphql"
+#import "../DestinationCityPage/Ref.graphql"
+#import "../DestinationCountryPage/Ref.graphql"
+#import "../DestinationOverviewPage/Ref.graphql"
+#import "../HotelPage/Ref.graphql"
+#import "../LoyaltyPage/Ref.graphql"
+#import "../StartPage/Ref.graphql"
+
+fragment Hero_CampaignPage on CampaignPage {
+ hero {
+ image
+ heading
+ theme
+ benefits
+ rate_text {
+ bold_text
+ text
+ }
+ button {
+ cta
+ linkConnection {
+ edges {
+ node {
+ __typename
+ ...AccountPageLink
+ ...CampaignPageLink
+ ...CollectionPageLink
+ ...ContentPageLink
+ ...DestinationCityPageLink
+ ...DestinationCountryPageLink
+ ...DestinationOverviewPageLink
+ ...HotelPageLink
+ ...LoyaltyPageLink
+ ...StartPageLink
+ }
+ }
+ }
+ }
+ }
+}
+
+fragment HeroRef_CampaignPage on CampaignPage {
+ hero {
+ button {
+ linkConnection {
+ edges {
+ node {
+ __typename
+ ...AccountPageRef
+ ...CampaignPageRef
+ ...CollectionPageRef
+ ...ContentPageRef
+ ...DestinationCityPageRef
+ ...DestinationCountryPageRef
+ ...DestinationOverviewPageRef
+ ...HotelPageRef
+ ...LoyaltyPageRef
+ ...StartPageRef
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/apps/scandic-web/lib/graphql/Query/CampaignPage/CampaignPage.graphql b/apps/scandic-web/lib/graphql/Query/CampaignPage/CampaignPage.graphql
index 6127bec86..745521c62 100644
--- a/apps/scandic-web/lib/graphql/Query/CampaignPage/CampaignPage.graphql
+++ b/apps/scandic-web/lib/graphql/Query/CampaignPage/CampaignPage.graphql
@@ -3,6 +3,7 @@
#import "../../Fragments/Blocks/Accordion.graphql"
#import "../../Fragments/Blocks/Essentials.graphql"
#import "../../Fragments/Blocks/CarouselCards.graphql"
+#import "../../Fragments/CampaignPage/Hero.graphql"
query GetCampaignPage($locale: String!, $uid: String!) {
campaign_page(uid: $uid, locale: $locale) {
@@ -26,6 +27,7 @@ query GetCampaignPage($locale: String!, $uid: String!) {
created_at
updated_at
}
+ ...Hero_CampaignPage
}
trackingProps: campaign_page(locale: "en", uid: $uid) {
url
@@ -39,6 +41,7 @@ query GetCampaignPageRefs($locale: String!, $uid: String!) {
...CarouselCards_CampaignPageRefs
...Accordion_CampaignPageRefs
}
+ ...HeroRef_CampaignPage
system {
...System
}
diff --git a/apps/scandic-web/server/routers/contentstack/campaignPage/output.ts b/apps/scandic-web/server/routers/contentstack/campaignPage/output.ts
index 16652e506..d2b3aca0e 100644
--- a/apps/scandic-web/server/routers/contentstack/campaignPage/output.ts
+++ b/apps/scandic-web/server/routers/contentstack/campaignPage/output.ts
@@ -11,6 +11,11 @@ import {
carouselCardsSchema,
} from "../schemas/blocks/carouselCards"
import { essentialsBlockSchema } from "../schemas/blocks/essentials"
+import { tempImageVaultAssetSchema } from "../schemas/imageVault"
+import {
+ linkConnectionRefs,
+ linkConnectionSchema,
+} from "../schemas/linkConnection"
import { systemSchema } from "../schemas/system"
import { CampaignPageEnum } from "@/types/enums/campaignPage"
@@ -39,10 +44,25 @@ export const blocksSchema = z.discriminatedUnion("__typename", [
campaignPageAccordion,
])
+export const heroSchema = z.object({
+ image: tempImageVaultAssetSchema,
+ heading: z.string(),
+ theme: z.enum(["Peach", "Burgundy"]).default("Peach"),
+ benefits: z.array(z.string()).nullish(),
+ rate_text: z
+ .object({
+ bold_text: z.string().nullish(),
+ text: z.string().nullish(),
+ })
+ .nullish(),
+ button: z.intersection(z.object({ cta: z.string() }), linkConnectionSchema),
+})
+
export const campaignPageSchema = z.object({
campaign_page: z.object({
title: z.string(),
campaign_identifier: z.string().nullish(),
+ hero: heroSchema,
heading: z.string(),
subheading: z.string().nullish(),
preamble: z.object({
@@ -80,9 +100,13 @@ const campaignPageBlockRefsItem = z.discriminatedUnion("__typename", [
campaignPageCarouselCardsRef,
campaignPageAccordionRefs,
])
+const heroRefsSchema = z.object({
+ button: linkConnectionRefs,
+})
export const campaignPageRefsSchema = z.object({
campaign_page: z.object({
+ hero: heroRefsSchema,
blocks: discriminatedUnionArray(
campaignPageBlockRefsItem.options
).nullable(),
diff --git a/apps/scandic-web/server/routers/contentstack/campaignPage/query.ts b/apps/scandic-web/server/routers/contentstack/campaignPage/query.ts
index 26f6b8eb8..18a26fb7a 100644
--- a/apps/scandic-web/server/routers/contentstack/campaignPage/query.ts
+++ b/apps/scandic-web/server/routers/contentstack/campaignPage/query.ts
@@ -46,7 +46,6 @@ export const campaignPageQueryRouter = router({
ttl: "max",
}
)
-
if (!refsResponse.data) {
const notFoundError = notFound(refsResponse)
metricsGetCampaignPageRefs.noDataError()
diff --git a/apps/scandic-web/server/routers/contentstack/schemas/pageLinks.ts b/apps/scandic-web/server/routers/contentstack/schemas/pageLinks.ts
index 3e6ae93a6..61f4866e9 100644
--- a/apps/scandic-web/server/routers/contentstack/schemas/pageLinks.ts
+++ b/apps/scandic-web/server/routers/contentstack/schemas/pageLinks.ts
@@ -173,6 +173,7 @@ export function transformPageLink(data: Data) {
title: data.title,
url: removeMultipleSlashes(`/${data.system.locale}/${data.url}`),
}
+
case ContentEnum.blocks.CollectionPage:
case ContentEnum.blocks.ContentPage:
case ContentEnum.blocks.LoyaltyPage:
diff --git a/apps/scandic-web/types/trpc/routers/contentstack/campaignPage.ts b/apps/scandic-web/types/trpc/routers/contentstack/campaignPage.ts
index f747eb8eb..c3dd08ae4 100644
--- a/apps/scandic-web/types/trpc/routers/contentstack/campaignPage.ts
+++ b/apps/scandic-web/types/trpc/routers/contentstack/campaignPage.ts
@@ -4,6 +4,7 @@ import type {
blocksSchema,
campaignPageRefsSchema,
campaignPageSchema,
+ heroSchema,
} from "@/server/routers/contentstack/campaignPage/output"
import type { essentialsSchema } from "@/server/routers/contentstack/schemas/blocks/essentials"
@@ -21,3 +22,5 @@ export interface CampaignPageRefs
export type Block = z.output
export type EssentialsBlock = z.output["essentials"]
+
+export type Hero = z.output
diff --git a/packages/design-system/lib/components/Divider/divider.module.css b/packages/design-system/lib/components/Divider/divider.module.css
index 626deb00b..435390806 100644
--- a/packages/design-system/lib/components/Divider/divider.module.css
+++ b/packages/design-system/lib/components/Divider/divider.module.css
@@ -36,3 +36,7 @@
.Border-Divider-Default {
background-color: var(--Border-Divider-Default);
}
+
+.Surface-Brand-Primary-1-OnSurface-Accent-Secondary {
+ background-color: var(--Surface-Brand-Primary-1-OnSurface-Accent-Secondary);
+}
diff --git a/packages/design-system/lib/components/Divider/variants.ts b/packages/design-system/lib/components/Divider/variants.ts
index 311114e81..d39dba0f1 100644
--- a/packages/design-system/lib/components/Divider/variants.ts
+++ b/packages/design-system/lib/components/Divider/variants.ts
@@ -11,6 +11,8 @@ export const dividerVariants = cva(styles.divider, {
white: styles.white,
'Border/Divider/Default': styles['Border-Divider-Default'],
'Border/Divider/Subtle': styles['Border-Divider-Subtle'],
+ 'Surface/Brand/Primary 1/OnSurface/Accent Secondary':
+ styles['Surface-Brand-Primary-1-OnSurface-Accent-Secondary'],
},
variant: {
horizontal: styles.horizontal,