import { z } from "zod" import { transformedImageVaultAssetSchema } from "@scandic-hotels/common/utils/imageVault" import { IconName } from "@scandic-hotels/design-system/Icons/iconName" import { linkConnectionRefs } from "../schemas/linkConnection" import { linkUnionSchema, transformPageLink } from "../schemas/pageLinks" export type UsePointsModalData = z.output export type UsePointsModalRefsData = z.output export const linkConnectionSchema = z .object({ edges: z.array( z.object({ node: linkUnionSchema, }) ), }) .transform((data) => { if (data.edges.length) { const linkNode = data.edges[0].node if (linkNode) { const link = transformPageLink(linkNode) if (link && link.url) { return link.url } } } return null }) const usePointsModalItemsSchema = z.object({ image: transformedImageVaultAssetSchema, link_group: z .array( z.object({ link_text: z.string().default(""), is_contentstack_link: z.boolean(), illustration: z.nativeEnum(IconName).nullish(), illustration_size: z .enum(["small", "medium", "large"]) .nullish() .default("large"), external_link: z .object({ href: z.string().default(""), }) .optional(), linkConnection: linkConnectionSchema, }) ) .transform((links) => links.map((link) => ({ text: link.link_text || "", isExternal: !link.is_contentstack_link, href: link.is_contentstack_link ? link.linkConnection || "" : link.external_link?.href || "", illustration: link.illustration ? { illustration: link.illustration, size: link.illustration_size || "large", } : undefined, })) ), }) export const usePointsModalSchema = z.object({ all_usepointsmodal: z.object({ items: z.array(usePointsModalItemsSchema), }), }) export const usePointsModalRefsSchema = z.object({ all_usepointsmodal: z.object({ items: z.array( z.object({ link_group: z.array(linkConnectionRefs), }) ), }), })