import { z } from "zod" import { BlocksEnums } from "../../../../types/blocksEnum" import { linkRefsUnionSchema, linkUnionSchema, transformPageLink, } from "../pageLinks" export const shortcutsBlockSchema = z.object({ shortcuts: z .object({ subtitle: z.string().nullable(), title: z.string().nullable(), two_column_list: z.boolean().nullable().default(false), shortcuts: z .array( z.object({ open_in_new_tab: z.boolean(), text: z.string().optional().default(""), linkConnection: z.object({ edges: z.array( z.object({ node: linkUnionSchema.transform((data) => { const link = transformPageLink(data) if (link) { return link } return data }), }) ), }), }) ) .transform((data) => { return data .filter((node) => node.linkConnection.edges.length) .map((node) => { const link = node.linkConnection.edges[0].node return { openInNewTab: node.open_in_new_tab, text: node.text, title: link.title, url: link.url, } }) }), }) .transform(({ two_column_list, ...rest }) => { return { ...rest, hasTwoColumns: !!two_column_list, } }), }) export const shortcutsSchema = z .object({ typename: z .literal(BlocksEnums.block.Shortcuts) .optional() .default(BlocksEnums.block.Shortcuts), }) .merge(shortcutsBlockSchema) export const shortcutsRefsSchema = z.object({ shortcuts: z.object({ shortcuts: z .array( z.object({ linkConnection: z.object({ edges: z.array( z.object({ node: linkRefsUnionSchema, }) ), }), }) ) .transform((data) => data .map((shortcut) => { return shortcut.linkConnection.edges.map(({ node }) => node.system) }) .flat() ), }), })