fix: support original_url
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
})
|
||||
|
||||
@@ -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 }
|
||||
}),
|
||||
})
|
||||
|
||||
@@ -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(),
|
||||
})
|
||||
|
||||
@@ -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 }
|
||||
}),
|
||||
})
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user