feat: breadcrumbs for My Pages
This commit is contained in:
5
server/routers/contentstack/breadcrumbs/index.ts
Normal file
5
server/routers/contentstack/breadcrumbs/index.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import { mergeRouters } from "@/server/trpc"
|
||||
|
||||
import { breadcrumbsQueryRouter } from "./query"
|
||||
|
||||
export const breadcrumbsRouter = mergeRouters(breadcrumbsQueryRouter)
|
||||
8
server/routers/contentstack/breadcrumbs/output.ts
Normal file
8
server/routers/contentstack/breadcrumbs/output.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { z } from "zod"
|
||||
|
||||
export const getBreadcrumbsSchema = z.array(
|
||||
z.object({
|
||||
href: z.string().optional(),
|
||||
title: z.string(),
|
||||
})
|
||||
)
|
||||
43
server/routers/contentstack/breadcrumbs/query.ts
Normal file
43
server/routers/contentstack/breadcrumbs/query.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
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()
|
||||
}),
|
||||
})
|
||||
7
server/routers/contentstack/index.ts
Normal file
7
server/routers/contentstack/index.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { router } from "@/server/trpc"
|
||||
|
||||
import { breadcrumbsRouter } from "./breadcrumbs"
|
||||
|
||||
export const contentstackRouter = router({
|
||||
breadcrumbs: breadcrumbsRouter,
|
||||
})
|
||||
Reference in New Issue
Block a user