import { z } from "zod" import * as pageLinks from "@/server/routers/contentstack/schemas/pageLinks" import { BlocksEnums } from "@/types/enums/blocks" import { DynamicContentEnum } from "@/types/enums/dynamicContent" export const dynamicContentSchema = z.object({ typename: z .literal(BlocksEnums.block.DynamicContent) .optional() .default(BlocksEnums.block.DynamicContent), dynamic_content: z.object({ component: z.enum(DynamicContentEnum.Blocks.enums), subtitle: z.string().optional().default(""), title: z.string().optional().default(""), link: z .object({ text: z.string().optional().default(""), linkConnection: z.object({ edges: z.array( z.object({ node: z .discriminatedUnion("__typename", [ pageLinks.accountPageSchema, pageLinks.contentPageSchema, pageLinks.hotelPageSchema, pageLinks.loyaltyPageSchema, pageLinks.collectionPageSchema, ]) .transform((data) => { const link = pageLinks.transform(data) if (link) { return link } return data }), }) ), }), }) .transform((data) => { if (data.linkConnection?.edges.length) { const link = data.linkConnection.edges?.[0]?.node return { href: link.url, text: data.text, title: link.title, } } return undefined }), }), }) export const dynamicContentRefsSchema = z.object({ dynamic_content: z.object({ link: z .object({ linkConnection: z.object({ edges: z.array( z.object({ node: z.discriminatedUnion("__typename", [ pageLinks.accountPageRefSchema, pageLinks.contentPageRefSchema, pageLinks.hotelPageRefSchema, pageLinks.loyaltyPageRefSchema, pageLinks.collectionPageRefSchema, ]), }) ), }), }) .transform((data) => { if (data.linkConnection?.edges.length) { return data.linkConnection.edges[0].node.system } return null }), }), })