Files
web/packages/trpc/lib/routers/contentstack/schemas/blocks/allCampaigns.ts
Matilda Landström 5bcbc23732 Merged in feat/LOY-419-highlight-promo-campaigns (pull request #3308)
feat(LOY-419): add promo campaigns to Campaign Overview Page

* feat(LOY-419): add promo campaigns as top campaign and all campaigns

* refactor(LOY-419)


Approved-by: Chuma Mcphoy (We Ahead)
2025-12-10 12:29:23 +00:00

84 lines
2.4 KiB
TypeScript

import { z } from "zod"
import { transformedImageVaultAssetSchema } from "@scandic-hotels/common/utils/imageVault"
import { removeMultipleSlashes } from "@scandic-hotels/common/utils/url"
import { BlocksEnums } from "../../../../types/blocksEnum"
import { campaignPageRefSchema, promoCampaignPageRefSchema } from "../pageLinks"
export const campaignPageCardSchema = z.object({
image: transformedImageVaultAssetSchema,
heading: z.string(),
text: z.string(),
})
export const allCampaignsSchema = z.object({
typename: z
.literal(BlocksEnums.block.CampaignOverviewPageAllCampaigns)
.optional()
.default(BlocksEnums.block.CampaignOverviewPageAllCampaigns),
all_campaigns: z
.object({
heading: z.string(),
preamble: z.string().nullish(),
campaignsConnection: z.object({
edges: z
.array(
z.object({
node: z.object({
url: z.string(),
card_content: z
.object({
image: transformedImageVaultAssetSchema,
heading: z.string().nullish(),
text: z.string().nullish(),
})
.nullish(),
system: z.object({
locale: z.string(),
}),
}),
})
)
.transform((data) => {
const mappedCards = data.map(({ node }) => {
const { url, card_content } = node
if (url && card_content?.image && card_content?.heading) {
return {
url: removeMultipleSlashes(`/${node.system.locale}/${url}`),
heading: card_content.heading,
image: card_content.image,
text: card_content.text ?? null,
}
}
return null
})
return mappedCards.filter((card) => !!card)
}),
}),
})
.transform((data) => {
return {
...data,
cards: data.campaignsConnection.edges,
}
}),
})
export const allCampaignsRefsSchema = z.object({
all_campaigns: z.object({
campaignsConnection: z.object({
edges: z.array(
z.object({
node: z.discriminatedUnion("__typename", [
campaignPageRefSchema,
promoCampaignPageRefSchema,
]),
})
),
}),
}),
})