diff --git a/components/Current/Header/LanguageSwitcher/Desktop/desktop.module.css b/components/Current/Header/LanguageSwitcher/Desktop/desktop.module.css
index c91a1de9d..dc4db7a49 100644
--- a/components/Current/Header/LanguageSwitcher/Desktop/desktop.module.css
+++ b/components/Current/Header/LanguageSwitcher/Desktop/desktop.module.css
@@ -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;
}
diff --git a/components/Current/Header/LanguageSwitcher/Desktop/index.tsx b/components/Current/Header/LanguageSwitcher/Desktop/index.tsx
index d48200c92..5c35a1daa 100644
--- a/components/Current/Header/LanguageSwitcher/Desktop/index.tsx
+++ b/components/Current/Header/LanguageSwitcher/Desktop/index.tsx
@@ -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 : ""}`}
>
-
- {languages[key as Lang]}
-
+ {urls[key as Lang]?.isExternal ? (
+
+ {languages[key as Lang]}
+
+ ) : (
+
+ {languages[key as Lang]}
+
+ )}
)
}
diff --git a/lib/graphql/Query/LoyaltyPage.graphql b/lib/graphql/Query/LoyaltyPage.graphql
index e8a8b59d1..7dd189e30 100644
--- a/lib/graphql/Query/LoyaltyPage.graphql
+++ b/lib/graphql/Query/LoyaltyPage.graphql
@@ -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
}
}
diff --git a/server/routers/contentstack/accountPage/output.ts b/server/routers/contentstack/accountPage/output.ts
index 7bf0c6dd7..204f23a81 100644
--- a/server/routers/contentstack/accountPage/output.ts
+++ b/server/routers/contentstack/accountPage/output.ts
@@ -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(),
})
diff --git a/server/routers/contentstack/accountPage/query.ts b/server/routers/contentstack/accountPage/query.ts
index 642671e0d..4bb778a1f 100644
--- a/server/routers/contentstack/accountPage/query.ts
+++ b/server/routers/contentstack/accountPage/query.ts
@@ -156,21 +156,22 @@ export const accountPageQueryRouter = router({
},
])
+ const urls = Object.keys(res.data).reduce(
+ (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((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 }
}),
})
diff --git a/server/routers/contentstack/loyaltyPage/output.ts b/server/routers/contentstack/loyaltyPage/output.ts
index 7f0d8a734..466611db9 100644
--- a/server/routers/contentstack/loyaltyPage/output.ts
+++ b/server/routers/contentstack/loyaltyPage/output.ts
@@ -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(),
})
diff --git a/server/routers/contentstack/loyaltyPage/query.ts b/server/routers/contentstack/loyaltyPage/query.ts
index 1c75c22cc..e9d14fbcc 100644
--- a/server/routers/contentstack/loyaltyPage/query.ts
+++ b/server/routers/contentstack/loyaltyPage/query.ts
@@ -197,21 +197,28 @@ export const loyaltyPageQueryRouter = router({
},
])
+ const urls = Object.keys(res.data).reduce(
+ (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((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 }
}),
})
diff --git a/types/requests/languageSwitcher.ts b/types/requests/languageSwitcher.ts
index d1de4307b..23d7b1cf0 100644
--- a/types/requests/languageSwitcher.ts
+++ b/types/requests/languageSwitcher.ts
@@ -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 = {