128 lines
2.9 KiB
TypeScript
128 lines
2.9 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import { Lang } from "@/constants/languages"
|
|
|
|
import { PageLinkEnum } from "@/types/requests/pageLinks"
|
|
|
|
const pageConnection = z.object({
|
|
edges: z.array(
|
|
z.object({
|
|
node: z.object({
|
|
__typename: z.nativeEnum(PageLinkEnum),
|
|
system: z.object({
|
|
locale: z.nativeEnum(Lang),
|
|
uid: z.string(),
|
|
}),
|
|
title: z.string(),
|
|
url: z.string(),
|
|
}),
|
|
})
|
|
),
|
|
})
|
|
|
|
const pageConnectionRefs = z.object({
|
|
edges: z.array(
|
|
z.object({
|
|
node: z.object({
|
|
__typename: z.nativeEnum(PageLinkEnum),
|
|
system: z.object({
|
|
content_type_uid: z.string(),
|
|
uid: z.string(),
|
|
}),
|
|
}),
|
|
})
|
|
),
|
|
})
|
|
|
|
export const navigationRefsPayloadSchema = z.object({
|
|
all_navigation_my_pages: z.object({
|
|
items: z
|
|
.array(
|
|
z.object({
|
|
items: z.array(
|
|
z.object({
|
|
__typename: z.string(),
|
|
item: z.object({
|
|
sub_items: z.array(
|
|
z.object({
|
|
__typename: z.string(),
|
|
item: z.object({
|
|
pageConnection: pageConnectionRefs,
|
|
}),
|
|
})
|
|
),
|
|
pageConnection: pageConnectionRefs,
|
|
}),
|
|
})
|
|
),
|
|
system: z.object({
|
|
content_type_uid: z.string(),
|
|
uid: z.string(),
|
|
}),
|
|
})
|
|
)
|
|
.refine(
|
|
(input) => {
|
|
return input.length === 1
|
|
},
|
|
{
|
|
message: `Expected all_navigation_my_pages items to only contain 1 in navigationRefsPayloadSchema`,
|
|
}
|
|
),
|
|
}),
|
|
})
|
|
|
|
export const navigationPayloadSchema = z.object({
|
|
all_navigation_my_pages: z.object({
|
|
items: z
|
|
.array(
|
|
z.object({
|
|
items: z.array(
|
|
z.object({
|
|
item: z.object({
|
|
link_text: z.string().default(""),
|
|
pageConnection,
|
|
sub_items: z.array(
|
|
z.object({
|
|
item: z.object({
|
|
link_text: z.string().default(""),
|
|
pageConnection,
|
|
}),
|
|
})
|
|
),
|
|
}),
|
|
})
|
|
),
|
|
title: z.string(),
|
|
})
|
|
)
|
|
.refine(
|
|
(input) => {
|
|
return input.length === 1
|
|
},
|
|
{
|
|
message: `Expected all_navigation_my_pages items to only contain 1 in navigationPayloadSchema`,
|
|
}
|
|
),
|
|
}),
|
|
})
|
|
|
|
const baseMenuItem = z.object({
|
|
lang: z.nativeEnum(Lang),
|
|
linkText: z.string(),
|
|
uid: z.string(),
|
|
url: z.string(),
|
|
originalUrl: z.string().optional(),
|
|
})
|
|
|
|
export const getNavigationSchema = z.object({
|
|
items: z.array(
|
|
z
|
|
.object({
|
|
subItems: z.array(baseMenuItem),
|
|
})
|
|
.merge(baseMenuItem)
|
|
),
|
|
title: z.string(),
|
|
})
|