feat: fetch urls for language switcher from contentstack

This commit is contained in:
Christel Westerberg
2024-05-27 16:46:01 +02:00
parent f4c58ec3ee
commit 28efca98b9
15 changed files with 223 additions and 24 deletions

View File

@@ -188,3 +188,12 @@ export const validateAccountPageRefsSchema = z.object({
export type AccountPageRefsDataRaw = z.infer<
typeof validateAccountPageRefsSchema
>
export const validateLanguageSwitcherData = z.object({
en: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
da: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
de: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
fi: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
sv: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
no: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
})

View File

@@ -1,6 +1,10 @@
import { Lang } from "@/constants/languages"
import { batchRequest } from "@/lib/graphql/batchRequest"
import {
GetAccountPage,
GetAccountPageRefs,
GetDaDeEnUrls,
GetFiNoSvUrls,
} from "@/lib/graphql/Query/AccountPage.graphql"
import { request } from "@/lib/graphql/request"
import { internalServerError, notFound } from "@/server/errors/trpc"
@@ -18,11 +22,16 @@ import {
AccountPageRefsDataRaw,
validateAccountPageRefsSchema,
validateAccountPageSchema,
validateLanguageSwitcherData,
} from "./output"
import { getConnections } from "./utils"
import { ContentEntries } from "@/types/components/myPages/myPage/enums"
import { Embeds } from "@/types/requests/embeds"
import {
LanguageSwitcherData,
LanguageSwitcherQueryDataRaw,
} from "@/types/requests/languageSwitcher"
import { Edges } from "@/types/requests/utils/edges"
import { RTEDocument } from "@/types/rte/node"
@@ -131,4 +140,37 @@ export const accountPageQueryRouter = router({
return accountPage
}),
languageSwitcher: contentstackProcedure.query(async ({ ctx }) => {
const variables = {
uid: ctx.uid,
}
const res = await batchRequest<LanguageSwitcherQueryDataRaw>([
{
document: GetDaDeEnUrls,
variables,
},
{
document: GetFiNoSvUrls,
variables,
},
])
const validatedLanguageSwitcherData =
validateLanguageSwitcherData.safeParse(res.data)
if (!validatedLanguageSwitcherData.success) {
throw internalServerError(validatedLanguageSwitcherData.error)
}
const urls = Object.keys(
validatedLanguageSwitcherData.data
).reduce<LanguageSwitcherData>((acc, key) => {
const items = validatedLanguageSwitcherData.data[key as Lang].items
const url = items.length ? items[0]?.url : undefined
return { ...acc, [key]: { url } }
}, {} as LanguageSwitcherData)
return { lang: ctx.lang, urls }
}),
})

View File

@@ -70,7 +70,7 @@ export const validateHeaderConfigSchema = z.object({
edges: z.array(
z.object({
node: z.object({
description: z.string().optional(),
description: z.string().optional().nullable(),
dimension: z.object({
height: z.number(),
width: z.number(),
@@ -79,8 +79,8 @@ export const validateHeaderConfigSchema = z.object({
system: z.object({
uid: z.string(),
}),
title: z.string(),
url: z.string(),
title: z.string().nullable(),
url: z.string().nullable(),
}),
})
),

View File

@@ -35,7 +35,6 @@ export const configQueryRouter = router({
return validatedContactConfigConfig.data.all_contact_config.items[0]
}),
header: publicProcedure.query(async ({ ctx }) => {
console.log({ ctx })
const response = await request<HeaderDataRaw>(
GetCurrentHeader,
{ locale: ctx.lang },

View File

@@ -306,3 +306,12 @@ export const validateLoyaltyPageRefsSchema = z.object({
export type LoyaltyPageRefsDataRaw = z.infer<
typeof validateLoyaltyPageRefsSchema
>
export const validateLanguageSwitcherData = z.object({
en: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
da: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
de: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
fi: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
sv: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
no: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
})

View File

@@ -1,4 +1,8 @@
import { Lang } from "@/constants/languages"
import { batchRequest } from "@/lib/graphql/batchRequest"
import {
GetDaDeEnUrls,
GetFiNoSvUrls,
GetLoyaltyPage,
GetLoyaltyPageRefs,
} from "@/lib/graphql/Query/LoyaltyPage.graphql"
@@ -17,12 +21,17 @@ import { removeEmptyObjects } from "../../utils"
import {
LoyaltyPage,
type LoyaltyPageRefsDataRaw,
validateLanguageSwitcherData,
validateLoyaltyPageRefsSchema,
validateLoyaltyPageSchema,
} from "./output"
import { getConnections } from "./utils"
import { LoyaltyBlocksTypenameEnum } from "@/types/components/loyalty/enums"
import {
LanguageSwitcherData,
LanguageSwitcherQueryDataRaw,
} from "@/types/requests/languageSwitcher"
function makeButtonObject(button: any) {
return {
@@ -172,4 +181,37 @@ export const loyaltyPageQueryRouter = router({
// Assert LoyaltyPage type to get correct typings for RTE fields
return validatedLoyaltyPage.data as LoyaltyPage
}),
languageSwitcher: contentstackProcedure.query(async ({ ctx }) => {
const variables = {
uid: ctx.uid,
}
const res = await batchRequest<LanguageSwitcherQueryDataRaw>([
{
document: GetDaDeEnUrls,
variables,
},
{
document: GetFiNoSvUrls,
variables,
},
])
const validatedLanguageSwitcherData =
validateLanguageSwitcherData.safeParse(res.data)
if (!validatedLanguageSwitcherData.success) {
throw internalServerError(validatedLanguageSwitcherData.error)
}
const urls = Object.keys(
validatedLanguageSwitcherData.data
).reduce<LanguageSwitcherData>((acc, key) => {
const items = validatedLanguageSwitcherData.data[key as Lang].items
const url = items.length ? items[0]?.url : undefined
return { ...acc, [key]: { url } }
}, {} as LanguageSwitcherData)
return { lang: ctx.lang, urls }
}),
})