From 88dde3def4706cb14ec66c909a65935147d172ca Mon Sep 17 00:00:00 2001 From: Christel Westerberg Date: Tue, 28 May 2024 14:57:39 +0200 Subject: [PATCH] fix: support original_url --- .../Desktop/desktop.module.css | 2 +- .../Header/LanguageSwitcher/Desktop/index.tsx | 14 ++++++++--- lib/graphql/Query/LoyaltyPage.graphql | 18 +++++++++++++ .../contentstack/accountPage/output.ts | 12 ++++----- .../routers/contentstack/accountPage/query.ts | 19 +++++++------- .../contentstack/loyaltyPage/output.ts | 12 ++++----- .../routers/contentstack/loyaltyPage/query.ts | 25 ++++++++++++------- types/requests/languageSwitcher.ts | 3 ++- 8 files changed, 70 insertions(+), 35 deletions(-) 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 = {