226 lines
6.8 KiB
TypeScript
226 lines
6.8 KiB
TypeScript
import {
|
|
GetLoyaltyBreadcrumbs,
|
|
GetLoyaltyBreadcrumbsRefs,
|
|
} from "@/lib/graphql/Query/BreadcrumbsLoyaltyPages.graphql"
|
|
import {
|
|
GetMyPagesBreadcrumbs,
|
|
GetMyPagesBreadcrumbsRefs,
|
|
} from "@/lib/graphql/Query/BreadcrumbsMyPages.graphql"
|
|
import { request } from "@/lib/graphql/request"
|
|
import { internalServerError, notFound } from "@/server/errors/trpc"
|
|
import { contentstackProcedure, router } from "@/server/trpc"
|
|
|
|
import {
|
|
generateRefsResponseTag,
|
|
generateTag,
|
|
generateTags,
|
|
} from "@/utils/generateTag"
|
|
import { removeMultipleSlashes } from "@/utils/url"
|
|
|
|
import {
|
|
getBreadcrumbsSchema,
|
|
validateBreadcrumbsConstenstackSchema,
|
|
validateBreadcrumbsConstenstackSchemaLoyalty,
|
|
validateBreadcrumbsRefsConstenstackSchema,
|
|
validateBreadcrumbsRefsConstenstackSchemaLoyalty,
|
|
} from "./output"
|
|
import {
|
|
affix,
|
|
getConnections,
|
|
getConnectionsLoyalty,
|
|
homeBreadcrumbs,
|
|
} from "./utils"
|
|
|
|
import type {
|
|
GetLoyaltyBreadcrumbsData,
|
|
GetLoyaltyBreadcrumbsRefsData,
|
|
GetMyPagesBreadcrumbsData,
|
|
GetMyPagesBreadcrumbsRefsData,
|
|
} from "@/types/requests/myPages/breadcrumbs"
|
|
|
|
export const breadcrumbsQueryRouter = router({
|
|
get: contentstackProcedure.query(async ({ ctx }) => {
|
|
const refsResponse = await request<GetMyPagesBreadcrumbsRefsData>(
|
|
GetMyPagesBreadcrumbsRefs,
|
|
{ locale: ctx.lang, url: ctx.pathname },
|
|
{
|
|
next: {
|
|
tags: [generateRefsResponseTag(ctx.lang, ctx.pathname, affix)],
|
|
},
|
|
}
|
|
)
|
|
console.log(ctx.pathname)
|
|
console.log(refsResponse.data.all_account_page)
|
|
if (!refsResponse.data) {
|
|
throw notFound(refsResponse)
|
|
}
|
|
|
|
const validatedRefsData =
|
|
validateBreadcrumbsRefsConstenstackSchema.safeParse(refsResponse.data)
|
|
if (!validatedRefsData.success) {
|
|
throw internalServerError(validatedRefsData.error)
|
|
}
|
|
console.log(validatedRefsData.data)
|
|
const connections = getConnections(validatedRefsData.data)
|
|
console.log(connections)
|
|
const tags = generateTags(ctx.lang, connections)
|
|
console.log(tags)
|
|
const page = validatedRefsData.data.all_account_page.items[0]
|
|
console.log(page)
|
|
|
|
tags.push(generateTag(ctx.lang, page.system.uid, affix))
|
|
console.log(tags)
|
|
|
|
const response = await request<GetMyPagesBreadcrumbsData>(
|
|
GetMyPagesBreadcrumbs,
|
|
{ locale: ctx.lang, url: ctx.pathname },
|
|
{ next: { tags } }
|
|
)
|
|
console.log(response.data)
|
|
if (!response.data) {
|
|
throw notFound(response)
|
|
}
|
|
|
|
const validatedBreadcrumbsData =
|
|
validateBreadcrumbsConstenstackSchema.safeParse(response.data)
|
|
|
|
if (!validatedBreadcrumbsData.success) {
|
|
throw internalServerError(validatedBreadcrumbsData.error)
|
|
}
|
|
|
|
const parentBreadcrumbs =
|
|
validatedBreadcrumbsData.data.all_account_page.items[0].breadcrumbs.parentsConnection.edges.map(
|
|
(breadcrumb) => {
|
|
return {
|
|
href: removeMultipleSlashes(
|
|
`/${breadcrumb.node.system.locale}/${breadcrumb.node.url}`
|
|
),
|
|
title: breadcrumb.node.breadcrumbs.title,
|
|
uid: breadcrumb.node.system.uid,
|
|
}
|
|
}
|
|
)
|
|
|
|
const pageBreadcrumb =
|
|
validatedBreadcrumbsData.data.all_account_page.items.map((breadcrumb) => {
|
|
return {
|
|
title: breadcrumb.breadcrumbs.title,
|
|
uid: breadcrumb.system.uid,
|
|
}
|
|
})
|
|
|
|
const breadcrumbs = [
|
|
homeBreadcrumbs[ctx.lang],
|
|
parentBreadcrumbs,
|
|
pageBreadcrumb,
|
|
].flat()
|
|
console.log(breadcrumbs)
|
|
|
|
const validatedBreadcrumbs = getBreadcrumbsSchema.safeParse(breadcrumbs)
|
|
if (!validatedBreadcrumbs.success) {
|
|
throw internalServerError(validatedBreadcrumbs.error)
|
|
}
|
|
|
|
return validatedBreadcrumbs.data
|
|
}),
|
|
loyalty: contentstackProcedure.query(async ({ ctx }) => {
|
|
console.log("HEJ", ctx)
|
|
const refsResponse = await request<GetLoyaltyBreadcrumbsRefsData>(
|
|
GetLoyaltyBreadcrumbsRefs,
|
|
{ locale: ctx.lang, url: ctx.pathname },
|
|
{
|
|
next: {
|
|
tags: [generateRefsResponseTag(ctx.lang, ctx.pathname, affix)],
|
|
},
|
|
}
|
|
)
|
|
console.log(ctx.pathname)
|
|
console.log(refsResponse.data.all_loyalty_page)
|
|
if (!refsResponse.data) {
|
|
throw notFound(refsResponse)
|
|
}
|
|
/*if (refsResponse.data.all_loyalty_page.items) {
|
|
Object.assign(
|
|
refsResponse.data.all_loyalty_page.items,
|
|
refsResponse.data.all_loyalty_page.items[0].web
|
|
)
|
|
delete refsResponse.data.all_loyalty_page.items[0].web
|
|
}*/
|
|
console.log(
|
|
refsResponse.data.all_loyalty_page.items[0].web.breadcrumbss
|
|
.parentsConnection
|
|
)
|
|
const validatedRefsData =
|
|
validateBreadcrumbsRefsConstenstackSchemaLoyalty.safeParse(
|
|
refsResponse.data
|
|
)
|
|
console.log("VALI", validatedRefsData)
|
|
if (!validatedRefsData.success) {
|
|
throw internalServerError(validatedRefsData.error)
|
|
}
|
|
console.log(
|
|
validatedRefsData.data.all_loyalty_page.items[0].web.breadcrumbss
|
|
)
|
|
const connections = getConnectionsLoyalty(validatedRefsData.data)
|
|
console.log(connections)
|
|
const tags = generateTags(ctx.lang, connections)
|
|
console.log(tags)
|
|
const page = validatedRefsData.data.all_loyalty_page.items[0]
|
|
console.log(page)
|
|
tags.push(generateTag(ctx.lang, page.system.uid, affix))
|
|
console.log(tags)
|
|
|
|
const response = await request<GetLoyaltyBreadcrumbsData>(
|
|
GetLoyaltyBreadcrumbs,
|
|
{ locale: ctx.lang, url: ctx.pathname },
|
|
{ next: { tags } }
|
|
)
|
|
console.log(response.data)
|
|
if (!response.data) {
|
|
throw notFound(response)
|
|
}
|
|
|
|
const validatedBreadcrumbsData =
|
|
validateBreadcrumbsConstenstackSchemaLoyalty.safeParse(response.data)
|
|
console.log(validatedBreadcrumbsData)
|
|
if (!validatedBreadcrumbsData.success) {
|
|
throw internalServerError(validatedBreadcrumbsData.error)
|
|
}
|
|
|
|
const parentBreadcrumbs =
|
|
validatedBreadcrumbsData.data.all_loyalty_page.items[0].web.breadcrumbss.parentsConnection.edges.map(
|
|
(breadcrumb) => {
|
|
return {
|
|
href: removeMultipleSlashes(
|
|
`/${breadcrumb.node.system.locale}/${breadcrumb.node.url}`
|
|
),
|
|
title: breadcrumb.node.breadcrumbs.title,
|
|
uid: breadcrumb.node.system.uid,
|
|
}
|
|
}
|
|
)
|
|
|
|
const pageBreadcrumb =
|
|
validatedBreadcrumbsData.data.all_loyalty_page.items.map((breadcrumb) => {
|
|
return {
|
|
title: breadcrumb.web.breadcrumbss.title,
|
|
uid: breadcrumb.system.uid,
|
|
}
|
|
})
|
|
|
|
const breadcrumbs = [
|
|
homeBreadcrumbs[ctx.lang],
|
|
parentBreadcrumbs,
|
|
pageBreadcrumb,
|
|
].flat()
|
|
console.log(breadcrumbs)
|
|
|
|
const validatedBreadcrumbs = getBreadcrumbsSchema.safeParse(breadcrumbs)
|
|
if (!validatedBreadcrumbs.success) {
|
|
throw internalServerError(validatedBreadcrumbs.error)
|
|
}
|
|
|
|
return validatedBreadcrumbs.data
|
|
}),
|
|
})
|