44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import { badRequestError } from "@/server/errors/trpc"
|
|
import { getBreadcrumbsSchema } from "./output"
|
|
import { publicProcedure, router } from "@/server/trpc"
|
|
|
|
const rootMyPagesBreadcrumb = {
|
|
href: "/en/my-pages",
|
|
title: "My Pages",
|
|
}
|
|
|
|
enum paths {
|
|
"/my-pages",
|
|
"/my-pages/benefits",
|
|
"/my-pages/overview",
|
|
"/my-pages/profile",
|
|
}
|
|
|
|
const keys = Object.keys(paths) as [keyof typeof paths]
|
|
|
|
const possibleBreadcrumbs: Record<string, { title: string; href?: string }[]> =
|
|
{
|
|
"/my-pages": [
|
|
{
|
|
title: rootMyPagesBreadcrumb.title,
|
|
},
|
|
],
|
|
"/my-pages/benefits": [rootMyPagesBreadcrumb, { title: "Benefits" }],
|
|
"/my-pages/overview": [rootMyPagesBreadcrumb, { title: "Overview" }],
|
|
"/my-pages/profile": [rootMyPagesBreadcrumb, { title: "Profile" }],
|
|
}
|
|
|
|
export const breadcrumbsQueryRouter = router({
|
|
get: publicProcedure.input(z.object({ href: z.enum(keys) })).query((opts) => {
|
|
const breadcrumbs = possibleBreadcrumbs[opts.input.href]
|
|
const validatedBreadcrumbs = getBreadcrumbsSchema.safeParse(breadcrumbs)
|
|
if (validatedBreadcrumbs.success) {
|
|
return breadcrumbs
|
|
}
|
|
|
|
throw badRequestError()
|
|
}),
|
|
})
|