fix: support original_url
This commit is contained in:
@@ -84,6 +84,7 @@
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
padding: 3px 20px;
|
padding: 3px 20px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.link:hover {
|
.link:hover {
|
||||||
@@ -96,5 +97,4 @@
|
|||||||
background-color: #00838e;
|
background-color: #00838e;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
outline: 0;
|
outline: 0;
|
||||||
text-decoration: none;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import { useCallback, useEffect, useRef, useState } from "react"
|
|||||||
|
|
||||||
import { Lang, languages } from "@/constants/languages"
|
import { Lang, languages } from "@/constants/languages"
|
||||||
|
|
||||||
|
import Link from "@/components/TempDesignSystem/Link"
|
||||||
|
|
||||||
import styles from "./desktop.module.css"
|
import styles from "./desktop.module.css"
|
||||||
|
|
||||||
import type { LanguageSwitcherProps } from "@/types/components/current/languageSwitcher"
|
import type { LanguageSwitcherProps } from "@/types/components/current/languageSwitcher"
|
||||||
@@ -61,9 +63,15 @@ export default function Desktop({
|
|||||||
key={key}
|
key={key}
|
||||||
className={`${styles.li} ${currentLanguage === key ? styles.active : ""}`}
|
className={`${styles.li} ${currentLanguage === key ? styles.active : ""}`}
|
||||||
>
|
>
|
||||||
<a className={styles.link} href={url}>
|
{urls[key as Lang]?.isExternal ? (
|
||||||
{languages[key as Lang]}
|
<Link className={styles.link} href={url}>
|
||||||
</a>
|
{languages[key as Lang]}
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
<a className={styles.link} href={url}>
|
||||||
|
{languages[key as Lang]}
|
||||||
|
</a>
|
||||||
|
)}
|
||||||
</li>
|
</li>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -249,16 +249,25 @@ query GetLoyaltyPageRefs($locale: String!, $uid: String!) {
|
|||||||
query GetDaDeEnUrls($uid: String!) {
|
query GetDaDeEnUrls($uid: String!) {
|
||||||
de: all_loyalty_page(where: { uid: $uid }, locale: "de") {
|
de: all_loyalty_page(where: { uid: $uid }, locale: "de") {
|
||||||
items {
|
items {
|
||||||
|
web {
|
||||||
|
original_url
|
||||||
|
}
|
||||||
url
|
url
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
en: all_loyalty_page(where: { uid: $uid }, locale: "en") {
|
en: all_loyalty_page(where: { uid: $uid }, locale: "en") {
|
||||||
items {
|
items {
|
||||||
|
web {
|
||||||
|
original_url
|
||||||
|
}
|
||||||
url
|
url
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
da: all_loyalty_page(where: { uid: $uid }, locale: "da") {
|
da: all_loyalty_page(where: { uid: $uid }, locale: "da") {
|
||||||
items {
|
items {
|
||||||
|
web {
|
||||||
|
original_url
|
||||||
|
}
|
||||||
url
|
url
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -267,16 +276,25 @@ query GetDaDeEnUrls($uid: String!) {
|
|||||||
query GetFiNoSvUrls($uid: String!) {
|
query GetFiNoSvUrls($uid: String!) {
|
||||||
sv: all_loyalty_page(where: { uid: $uid }, locale: "sv") {
|
sv: all_loyalty_page(where: { uid: $uid }, locale: "sv") {
|
||||||
items {
|
items {
|
||||||
|
web {
|
||||||
|
original_url
|
||||||
|
}
|
||||||
url
|
url
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
no: all_loyalty_page(where: { uid: $uid }, locale: "no") {
|
no: all_loyalty_page(where: { uid: $uid }, locale: "no") {
|
||||||
items {
|
items {
|
||||||
|
web {
|
||||||
|
original_url
|
||||||
|
}
|
||||||
url
|
url
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fi: all_loyalty_page(where: { uid: $uid }, locale: "fi") {
|
fi: all_loyalty_page(where: { uid: $uid }, locale: "fi") {
|
||||||
items {
|
items {
|
||||||
|
web {
|
||||||
|
original_url
|
||||||
|
}
|
||||||
url
|
url
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,10 +190,10 @@ export type AccountPageRefsDataRaw = z.infer<
|
|||||||
>
|
>
|
||||||
|
|
||||||
export const validateLanguageSwitcherData = z.object({
|
export const validateLanguageSwitcherData = z.object({
|
||||||
en: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
|
en: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
|
||||||
da: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
|
da: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
|
||||||
de: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
|
de: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
|
||||||
fi: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
|
fi: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
|
||||||
sv: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
|
sv: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
|
||||||
no: z.object({ items: z.array(z.object({ url: z.string() }).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 =
|
const validatedLanguageSwitcherData =
|
||||||
validateLanguageSwitcherData.safeParse(res.data)
|
validateLanguageSwitcherData.safeParse(urls)
|
||||||
|
|
||||||
if (!validatedLanguageSwitcherData.success) {
|
if (!validatedLanguageSwitcherData.success) {
|
||||||
throw internalServerError(validatedLanguageSwitcherData.error)
|
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 }
|
return { lang: ctx.lang, urls }
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -308,10 +308,10 @@ export type LoyaltyPageRefsDataRaw = z.infer<
|
|||||||
>
|
>
|
||||||
|
|
||||||
export const validateLanguageSwitcherData = z.object({
|
export const validateLanguageSwitcherData = z.object({
|
||||||
en: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
|
en: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
|
||||||
da: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
|
da: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
|
||||||
de: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
|
de: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
|
||||||
fi: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
|
fi: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
|
||||||
sv: z.object({ items: z.array(z.object({ url: z.string() }).nullable()) }),
|
sv: z.object({ url: z.string(), isExternal: z.boolean() }).nullable(),
|
||||||
no: z.object({ items: z.array(z.object({ url: z.string() }).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 =
|
const validatedLanguageSwitcherData =
|
||||||
validateLanguageSwitcherData.safeParse(res.data)
|
validateLanguageSwitcherData.safeParse(urls)
|
||||||
|
|
||||||
if (!validatedLanguageSwitcherData.success) {
|
if (!validatedLanguageSwitcherData.success) {
|
||||||
throw internalServerError(validatedLanguageSwitcherData.error)
|
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 }
|
return { lang: ctx.lang, urls }
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
type CurrentLanguageResult = {
|
type CurrentLanguageResult = {
|
||||||
url: string
|
url: string
|
||||||
|
isExternal?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export type LanguageSwitcherData = {
|
export type LanguageSwitcherData = {
|
||||||
@@ -12,7 +13,7 @@ export type LanguageSwitcherData = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type LanguageResult = {
|
type LanguageResult = {
|
||||||
items: { url: string }[]
|
items: { web?: { original_url?: string | null }; url: string }[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export type LanguageSwitcherQueryDataRaw = {
|
export type LanguageSwitcherQueryDataRaw = {
|
||||||
|
|||||||
Reference in New Issue
Block a user