import { z } from "zod" import { discriminatedUnionArray } from "@/lib/discriminatedUnion" import { accordionRefsSchema, accordionSchema, } from "../schemas/blocks/accordion" import { carouselCardsRefsSchema, carouselCardsSchema, } from "../schemas/blocks/carouselCards" import { essentialsBlockSchema } from "../schemas/blocks/essentials" import { systemSchema } from "../schemas/system" import { CampaignPageEnum } from "@/types/enums/campaignPage" const campaignPageEssentials = z .object({ __typename: z.literal(CampaignPageEnum.ContentStack.blocks.Essentials), }) .merge(essentialsBlockSchema) const campaignPageCarouselCards = z .object({ __typename: z.literal(CampaignPageEnum.ContentStack.blocks.CarouselCards), }) .merge(carouselCardsSchema) export const campaignPageAccordion = z .object({ __typename: z.literal(CampaignPageEnum.ContentStack.blocks.Accordion), }) .merge(accordionSchema) export const blocksSchema = z.discriminatedUnion("__typename", [ campaignPageEssentials, campaignPageCarouselCards, campaignPageAccordion, ]) export const campaignPageSchema = z.object({ campaign_page: z.object({ title: z.string(), campaign_identifier: z.string().nullish(), heading: z.string(), subheading: z.string().nullish(), preamble: z.object({ is_two_columns: z.boolean().default(false), first_column: z.string(), second_column: z.string(), }), blocks: discriminatedUnionArray(blocksSchema.options), system: systemSchema.merge( z.object({ created_at: z.string(), updated_at: z.string(), }) ), }), trackingProps: z.object({ url: z.string(), }), }) /** REFS */ const campaignPageCarouselCardsRef = z .object({ __typename: z.literal(CampaignPageEnum.ContentStack.blocks.CarouselCards), }) .merge(carouselCardsRefsSchema) const campaignPageAccordionRefs = z .object({ __typename: z.literal(CampaignPageEnum.ContentStack.blocks.Accordion), }) .merge(accordionRefsSchema) const campaignPageBlockRefsItem = z.discriminatedUnion("__typename", [ campaignPageCarouselCardsRef, campaignPageAccordionRefs, ]) export const campaignPageRefsSchema = z.object({ campaign_page: z.object({ blocks: discriminatedUnionArray( campaignPageBlockRefsItem.options ).nullable(), system: systemSchema, }), })