fix: support original_url

This commit is contained in:
Christel Westerberg
2024-05-28 14:57:39 +02:00
parent 28efca98b9
commit 88dde3def4
8 changed files with 70 additions and 35 deletions

View File

@@ -84,6 +84,7 @@
font-weight: 400;
padding: 3px 20px;
white-space: nowrap;
text-decoration: none;
}
.link:hover {
@@ -96,5 +97,4 @@
background-color: #00838e;
color: #fff;
outline: 0;
text-decoration: none;
}

View File

@@ -3,6 +3,8 @@ import { useCallback, useEffect, useRef, useState } from "react"
import { Lang, languages } from "@/constants/languages"
import Link from "@/components/TempDesignSystem/Link"
import styles from "./desktop.module.css"
import type { LanguageSwitcherProps } from "@/types/components/current/languageSwitcher"
@@ -61,9 +63,15 @@ export default function Desktop({
key={key}
className={`${styles.li} ${currentLanguage === key ? styles.active : ""}`}
>
<a className={styles.link} href={url}>
{languages[key as Lang]}
</a>
{urls[key as Lang]?.isExternal ? (
<Link className={styles.link} href={url}>
{languages[key as Lang]}
</Link>
) : (
<a className={styles.link} href={url}>
{languages[key as Lang]}
</a>
)}
</li>
)
}

View File

@@ -249,16 +249,25 @@ query GetLoyaltyPageRefs($locale: String!, $uid: String!) {
query GetDaDeEnUrls($uid: String!) {
de: all_loyalty_page(where: { uid: $uid }, locale: "de") {
items {
web {
original_url
}
url
}
}
en: all_loyalty_page(where: { uid: $uid }, locale: "en") {
items {
web {
original_url
}
url
}
}
da: all_loyalty_page(where: { uid: $uid }, locale: "da") {
items {
web {
original_url
}
url
}
}
@@ -267,16 +276,25 @@ query GetDaDeEnUrls($uid: String!) {
query GetFiNoSvUrls($uid: String!) {
sv: all_loyalty_page(where: { uid: $uid }, locale: "sv") {
items {
web {
original_url
}
url
}
}
no: all_loyalty_page(where: { uid: $uid }, locale: "no") {
items {
web {
original_url
}
url
}
}
fi: all_loyalty_page(where: { uid: $uid }, locale: "fi") {
items {
web {
original_url
}
url
}
}

View File

@@ -190,10 +190,10 @@ export type AccountPageRefsDataRaw = z.infer<
>
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()) }),
en: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
da: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
de: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
fi: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
sv: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
no: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
})

View File

@@ -156,21 +156,22 @@ export const accountPageQueryRouter = router({
},
])
const urls = Object.keys(res.data).reduce<LanguageSwitcherData>(
(acc, key) => {
const item = res.data[key as Lang]?.items[0]
const url = item ? `/${key}${item.url}` : undefined
return { ...acc, [key]: { url, isExternal: false } }
},
{} as LanguageSwitcherData
)
const validatedLanguageSwitcherData =
validateLanguageSwitcherData.safeParse(res.data)
validateLanguageSwitcherData.safeParse(urls)
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

@@ -308,10 +308,10 @@ export type LoyaltyPageRefsDataRaw = z.infer<
>
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()) }),
en: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
da: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
de: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
fi: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
sv: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
no: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
})

View File

@@ -197,21 +197,28 @@ export const loyaltyPageQueryRouter = router({
},
])
const urls = Object.keys(res.data).reduce<LanguageSwitcherData>(
(acc, key) => {
const item = res.data[key as Lang]?.items[0]
const url = item
? item.web?.original_url || `/${key}${item.url}`
: undefined
return {
...acc,
[key]: { url, isExternal: !!item?.web?.original_url },
}
},
{} as LanguageSwitcherData
)
const validatedLanguageSwitcherData =
validateLanguageSwitcherData.safeParse(res.data)
validateLanguageSwitcherData.safeParse(urls)
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

@@ -1,5 +1,6 @@
type CurrentLanguageResult = {
url: string
isExternal?: boolean
}
export type LanguageSwitcherData = {
@@ -12,7 +13,7 @@ export type LanguageSwitcherData = {
}
type LanguageResult = {
items: { url: string }[]
items: { web?: { original_url?: string | null }; url: string }[]
}
export type LanguageSwitcherQueryDataRaw = {