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 } 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: campaignPageRefSchema, }) ), }), }), })