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; 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;
} }

View File

@@ -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>
) )
} }

View File

@@ -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
} }
} }

View File

@@ -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(),
}) })

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 = 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 }
}), }),
}) })

View File

@@ -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(),
}) })

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 = 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 }
}), }),
}) })

View File

@@ -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 = {