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)
84 lines
2.4 KiB
TypeScript
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,
|
|
]),
|
|
})
|
|
),
|
|
}),
|
|
}),
|
|
})
|