= {
- "/customer-service/frequently-asked-questions/using-the-website":
- currentAboutLinks,
- "/explore-scandic/wifi": currentWifiLinks,
- "/sponsoring": currentSponsoringLinks,
-}
-
-const currentLanguage = "English"
-
-export default function EnHeader({ pathname }: HeaderProps) {
- const links = paths?.[pathname] ?? null
- return (
-
- )
-}
diff --git a/components/Current/Header/Fi.tsx b/components/Current/Header/Fi.tsx
deleted file mode 100644
index 87ec99599..000000000
--- a/components/Current/Header/Fi.tsx
+++ /dev/null
@@ -1,198 +0,0 @@
-/* eslint-disable @next/next/no-img-element */
-import {
- currentAboutLinks,
- currentSponsoringLinks,
- currentWifiLinks,
-} from "@/constants/current/links"
-
-import Desktop from "./LanguageSwitcher/Desktop"
-import Mobile from "./LanguageSwitcher/Mobile"
-
-import type { LanguageSwitcherLink } from "@/types/components/current/languageSwitcher"
-import type { HeaderProps } from "@/types/components/current/header"
-
-const paths: Record = {
- "/asiakaspalvelu/usein-kysytyt-kysymykset/tietoja-internetsivuista":
- currentAboutLinks,
- "/koe-scandic/maksuton-internetyhteys": currentSponsoringLinks,
- "/scandic-entdecken/wlan": currentWifiLinks,
-}
-
-const currentLanguage = "Suomi"
-
-export default function FiHeader({ pathname }: HeaderProps) {
- const links = paths?.[pathname] ?? null
- return (
-
- )
-}
diff --git a/components/Current/Header/LanguageSwitcher/Desktop.tsx b/components/Current/Header/LanguageSwitcher/Desktop.tsx
deleted file mode 100644
index dbdd288a7..000000000
--- a/components/Current/Header/LanguageSwitcher/Desktop.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import type { LanguageSwitcherProps } from "@/types/components/current/languageSwitcher"
-
-export default function Desktop({
- currentLanguage,
- links,
-}: LanguageSwitcherProps) {
- return (
-
-
-
-
-
- {currentLanguage}
- Choose language
-
-
-
-
- )
-}
diff --git a/components/Current/Header/LanguageSwitcher/Desktop/desktop.module.css b/components/Current/Header/LanguageSwitcher/Desktop/desktop.module.css
new file mode 100644
index 000000000..7d5faa37a
--- /dev/null
+++ b/components/Current/Header/LanguageSwitcher/Desktop/desktop.module.css
@@ -0,0 +1,45 @@
+.dropdown {
+ background-clip: padding-box;
+ background-color: #fff;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ display: none;
+ float: left;
+ font-size: 1rem;
+ left: 0;
+ list-style: none;
+ margin: 2px 0 0;
+ min-width: 160px;
+ padding: 5px 0;
+ position: absolute;
+ text-align: left;
+ top: 100%;
+ z-index: 11;
+}
+
+.dropdown.isOpen {
+ display: block;
+}
+
+.link {
+ clear: both;
+ color: grey;
+ display: block;
+ font-weight: 400;
+ padding: 3px 20px;
+ white-space: nowrap;
+}
+
+.link:hover {
+ background-color: #f5f5f5;
+ color: #737373;
+ text-decoration: none;
+}
+
+.active>.link {
+ background-color: #00838e;
+ color: #fff;
+ outline: 0;
+ text-decoration: none;
+}
\ No newline at end of file
diff --git a/components/Current/Header/LanguageSwitcher/Desktop/index.tsx b/components/Current/Header/LanguageSwitcher/Desktop/index.tsx
new file mode 100644
index 000000000..9182f4182
--- /dev/null
+++ b/components/Current/Header/LanguageSwitcher/Desktop/index.tsx
@@ -0,0 +1,82 @@
+"use client"
+import { useEffect, useRef, useState } from "react"
+
+import { languages } from "@/constants/languages"
+
+import styles from "./desktop.module.css"
+
+import type { LanguageSwitcherProps } from "@/types/components/current/languageSwitcher"
+
+export default function Desktop({
+ currentLanguage,
+ urls,
+}: LanguageSwitcherProps) {
+ const [isOpen, setIsOpen] = useState(false)
+ const divRef = useRef(null)
+
+ function toggleOpen() {
+ setIsOpen(prevIsOpen => !prevIsOpen)
+ }
+
+ function close() {
+ setIsOpen(false)
+ }
+
+ useEffect(() => {
+ function handleClickOutside(evt: Event) {
+ const target = evt.target as HTMLElement
+ if (divRef.current && target && !divRef.current.contains(target)) {
+ close()
+ }
+ }
+
+ if (divRef.current) {
+ document.addEventListener('click', handleClickOutside, false)
+ }
+ return () => {
+ document.removeEventListener('click', handleClickOutside, false)
+ }
+ }, [close])
+
+ return (
+
+
+
+
+
+ {currentLanguage}
+ Choose language
+
+
+
+
+ )
+}
diff --git a/components/Current/Header/LanguageSwitcher/Mobile.tsx b/components/Current/Header/LanguageSwitcher/Mobile.tsx
deleted file mode 100644
index 7344b1d76..000000000
--- a/components/Current/Header/LanguageSwitcher/Mobile.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import type { LanguageSwitcherProps } from "@/types/components/current/languageSwitcher"
-
-export default function Mobile({
- currentLanguage,
- links,
-}: LanguageSwitcherProps) {
- return (
-
-
- {currentLanguage}{" "}
-
- Choose language
-
-
-
- )
-}
diff --git a/components/Current/Header/LanguageSwitcher/Mobile/index.tsx b/components/Current/Header/LanguageSwitcher/Mobile/index.tsx
new file mode 100644
index 000000000..7fd6d7249
--- /dev/null
+++ b/components/Current/Header/LanguageSwitcher/Mobile/index.tsx
@@ -0,0 +1,55 @@
+"use client"
+import { useState } from "react"
+
+import { languages } from "@/constants/languages"
+
+import styles from "./mobile.module.css"
+
+import type { LanguageSwitcherProps } from "@/types/components/current/languageSwitcher"
+
+export default function Mobile({
+ currentLanguage,
+ urls,
+}: LanguageSwitcherProps) {
+ const [isOpen, setIsOpen] = useState(false)
+
+ function toggleOpen() {
+ setIsOpen(prevIsOpen => !prevIsOpen)
+ }
+
+ return (
+
+
+ {currentLanguage}{" "}
+
+ Choose language
+
+
+
+ )
+}
diff --git a/components/Current/Header/LanguageSwitcher/Mobile/mobile.module.css b/components/Current/Header/LanguageSwitcher/Mobile/mobile.module.css
new file mode 100644
index 000000000..0f678bbd1
--- /dev/null
+++ b/components/Current/Header/LanguageSwitcher/Mobile/mobile.module.css
@@ -0,0 +1,31 @@
+.dropdown {
+ display: none;
+}
+
+.dropdown.isOpen {
+ display: block;
+}
+
+.arrow {
+ background-image: url("/Static/img/icons/arrows/arrow-down-grey.png");
+ background-position: 50%;
+ background-repeat: no-repeat;
+ display: inline-block;
+ margin-left: 5px;
+ padding: 5px 10px;
+}
+
+.arrow.open {
+ background-image: url("/Static/img/icons/arrows/arrow-up-grey.png");
+}
+
+.link {
+ color: grey;
+ display: block;
+ text-transform: capitalize;
+}
+
+.link:hover {
+ color: #7f7369;
+ text-decoration: none;
+}
\ No newline at end of file
diff --git a/components/Current/Header/MainMenu/index.tsx b/components/Current/Header/MainMenu/index.tsx
index b1b09835b..8f04b7a74 100644
--- a/components/Current/Header/MainMenu/index.tsx
+++ b/components/Current/Header/MainMenu/index.tsx
@@ -2,17 +2,21 @@
import { useState } from "react"
import Image from "@/components/Image"
-// import Mobile from "../LanguageSwitcher/Mobile"
+import Mobile from "../LanguageSwitcher/Mobile"
import styles from "./mainMenu.module.css"
import type { MainMenuProps } from "@/types/components/current/header/mainMenu"
-/**
- * Mobile is commented out as it relates to
- * LanguageSwitcher and will be handled in another task
- */
-export default function MainMenu({ frontpageLinkText, homeHref, links, logo, topMenuMobileLinks }: MainMenuProps) {
+export default function MainMenu({
+ currentLanguage,
+ frontpageLinkText,
+ homeHref,
+ links,
+ logo,
+ topMenuMobileLinks,
+ urls,
+}: MainMenuProps) {
const [isOpen, setIsOpen] = useState(false)
function toogleIsOpen() {
@@ -90,9 +94,11 @@ export default function MainMenu({ frontpageLinkText, homeHref, links, logo, top
))}
- {/*
- {links ? : null}
- */}
+ {urls ? (
+
+
+
+ ) : null}
diff --git a/components/Current/Header/MainMenu/mainMenu.module.css b/components/Current/Header/MainMenu/mainMenu.module.css
index ed56b3ef0..58dbe87e1 100644
--- a/components/Current/Header/MainMenu/mainMenu.module.css
+++ b/components/Current/Header/MainMenu/mainMenu.module.css
@@ -167,6 +167,7 @@
.mainMenu {
background-color: hsla(0, 0%, 100%, .95);
position: relative;
+ z-index: unset;
}
.container {
diff --git a/components/Current/Header/No.tsx b/components/Current/Header/No.tsx
deleted file mode 100644
index 42399eccf..000000000
--- a/components/Current/Header/No.tsx
+++ /dev/null
@@ -1,203 +0,0 @@
-import {
- currentAboutLinks,
- currentSponsoringLinks,
- currentWifiLinks,
-} from "@/constants/current/links"
-
-import Desktop from "./LanguageSwitcher/Desktop"
-import Mobile from "./LanguageSwitcher/Mobile"
-
-import type { LanguageSwitcherLink } from "@/types/components/current/languageSwitcher"
-import type { HeaderProps } from "@/types/components/current/header"
-
-const paths: Record = {
- "/kundeservice/sporsmal-og-svar/bruk-av-nettsiden": currentAboutLinks,
- "/utforsk-scandic/wifi": currentWifiLinks,
- "/vi-sponser": currentSponsoringLinks,
-}
-
-const currentLanguage = "Norsk"
-
-export default function NoHeader({ pathname }: HeaderProps) {
- const links = paths?.[pathname] ?? null
-
- return (
-
- )
-}
diff --git a/components/Current/Header/Sv.tsx b/components/Current/Header/Sv.tsx
deleted file mode 100644
index 8f3aca360..000000000
--- a/components/Current/Header/Sv.tsx
+++ /dev/null
@@ -1,198 +0,0 @@
-/* eslint-disable @next/next/no-img-element */
-import {
- currentAboutLinks,
- currentSponsoringLinks,
- currentWifiLinks,
-} from "@/constants/current/links"
-
-import Desktop from "./LanguageSwitcher/Desktop"
-import Mobile from "./LanguageSwitcher/Mobile"
-
-import type { LanguageSwitcherLink } from "@/types/components/current/languageSwitcher"
-import type { HeaderProps } from "@/types/components/current/header"
-
-const paths: Record = {
- "/kundservice/fragor-och-svar/om-scandics-webbplats": currentAboutLinks,
- "/utforska-scandic/wi-fi": currentWifiLinks,
- "/vi-sponsrar": currentSponsoringLinks,
-}
-
-const currentLanguage = "Svenska"
-
-export default function SvHeader({ pathname }: HeaderProps) {
- const links = paths?.[pathname] ?? null
- return (
-
- )
-}
diff --git a/components/Current/Header/TopMenu/index.tsx b/components/Current/Header/TopMenu/index.tsx
index ba4d4379f..b73c32c77 100644
--- a/components/Current/Header/TopMenu/index.tsx
+++ b/components/Current/Header/TopMenu/index.tsx
@@ -1,14 +1,10 @@
-// import Desktop from "../LanguageSwitcher/Desktop"
+import Desktop from "../LanguageSwitcher/Desktop"
import styles from "./topMenu.module.css"
import type { TopMenuProps } from "@/types/components/current/header/topMenu"
-/**
- * Desktop is commented out as it relates to
- * LanguageSwitcher and will be handled in another task
- */
-export default function TopMenu({ frontpageLinkText, homeHref, links }: TopMenuProps) {
+export default function TopMenu({ currentLanguage, frontpageLinkText, homeHref, links, urls }: TopMenuProps) {
return (
@@ -20,9 +16,12 @@ export default function TopMenu({ frontpageLinkText, homeHref, links }: TopMenuP
- {/*
- {links ? : null}
- */}
+ {urls ? (
+
+
+
+ ) : null}
+
{links.map(({ link }) => (
(GetHeader, { locale: lang })
+ const { data: urls } = await batchRequest([
+ {
+ document: GetDaDeEnUrls,
+ variables,
+ },
+ {
+ document: GetFiNoSvUrls,
+ variables,
+ },
+ ])
+
if (!data.all_header.items.length) {
return null
}
+ const currentLanguage = languages[lang]
const homeHref = `https://www.scandichotels.com/${lang}`
const { frontpage_link_text, logoConnection, menu, top_menu } = data.all_header.items[0]
const logo = logoConnection.edges?.[0]?.node
@@ -27,16 +51,20 @@ export default async function Header({ lang }: LangParams) {
)
diff --git a/constants/current/links.ts b/constants/current/links.ts
deleted file mode 100644
index f60a63134..000000000
--- a/constants/current/links.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-export const currentAboutLinks = [
- {
- href: "https://www.scandichotels.com/customer-service/frequently-asked-questions/using-the-website",
- title: "English",
- },
- {
- href: "https://www.scandichotels.se/kundservice/fragor-och-svar/om-scandics-webbplats",
- title: "Svenska",
- },
- {
- href: "https://www.scandichotels.no/kundeservice/sporsmal-og-svar/bruk-av-nettsiden",
- title: "Norsk",
- },
- {
- href: "https://www.scandichotels.dk/kundeservice/sporgsmal-og-svar/om-scandics-website",
- title: "Dansk",
- },
- {
- href: "https://www.scandichotels.fi/asiakaspalvelu/usein-kysytyt-kysymykset/tietoja-internetsivuista",
- title: "Suomi",
- },
- {
- href: "https://www.scandichotels.de/kundenbetreuung/haufig-gestellte-fragen/nutzung-der-internetseite",
- title: "Deutsch",
- },
-]
-
-export const currentSponsoringLinks = [
- {
- href: "https://www.scandichotels.com/sponsoring",
- title: "English",
- },
- {
- href: "https://www.scandichotels.se/vi-sponsrar",
- title: "Svenska",
- },
- {
- href: "https://www.scandichotels.no/vi-sponser",
- title: "Norsk",
- },
- {
- href: "https://www.scandichotels.dk/sponsorering",
- title: "Dansk",
- },
- {
- href: "https://www.scandichotels.fi/sponsorointi",
- title: "Suomi",
- },
- {
- href: "https://www.scandichotels.de/sponsoring",
- title: "Deutsch",
- },
-]
-
-export const currentWifiLinks = [
- {
- href: "https://www.scandichotels.com/explore-scandic/wifi",
- title: "English",
- },
- {
- href: "https://www.scandichotels.se/utforska-scandic/wi-fi",
- title: "Svenska",
- },
- {
- href: "https://www.scandichotels.no/utforsk-scandic/wifi",
- title: "Norsk",
- },
- {
- href: "https://www.scandichotels.dk/oplev-scandic/wifi",
- title: "Dansk",
- },
- {
- href: "https://www.scandichotels.fi/koe-scandic/maksuton-internetyhteys",
- title: "Suomi",
- },
- {
- href: "https://www.scandichotels.de/scandic-entdecken/wlan",
- title: "Deutsch",
- },
-]
diff --git a/constants/languages.ts b/constants/languages.ts
new file mode 100644
index 000000000..089ded4ba
--- /dev/null
+++ b/constants/languages.ts
@@ -0,0 +1,8 @@
+export const languages = {
+ da: "Dansk",
+ de: "Deutsch",
+ en: "English",
+ fi: "Suomi",
+ no: "Norsk",
+ sv: "Svenska",
+}
diff --git a/lib/batchRequest.ts b/lib/batchRequest.ts
new file mode 100644
index 000000000..1a5aa177d
--- /dev/null
+++ b/lib/batchRequest.ts
@@ -0,0 +1,28 @@
+import "server-only"
+import { request } from "./request"
+
+import type { Data } from "@/types/request"
+import type { BatchRequestDocument } from "graphql-request"
+
+export async function batchRequest(queries: BatchRequestDocument[]): Promise> {
+ try {
+ const response = await Promise.allSettled(
+ queries.map(query => request(query.document, query.variables))
+ )
+
+ let data = {} as T
+ const reasons = []
+ response.forEach(res => {
+ if (res.status === "fulfilled") {
+ data = Object.assign({}, data, res.value.data)
+ } else {
+ reasons.push(res.reason)
+ }
+ })
+
+ return { data }
+ } catch (error) {
+ console.error(error)
+ throw new Error("Something went wrong")
+ }
+}
diff --git a/lib/graphql/Query/LanguageSwitcher.graphql b/lib/graphql/Query/LanguageSwitcher.graphql
new file mode 100644
index 000000000..1ca39ed97
--- /dev/null
+++ b/lib/graphql/Query/LanguageSwitcher.graphql
@@ -0,0 +1,21 @@
+query GetDaDeEnUrls($uid: String!) {
+ de: current_blocks_page(uid: $uid, locale: "de") {
+ url: original_url
+ }
+ en: current_blocks_page(uid: $uid, locale: "en") {
+ url: original_url
+ }
+}
+
+query GetFiNoSvUrls($uid: String!) {
+ fi: current_blocks_page(uid: $uid, locale: "fi") {
+ url: original_url
+ }
+ no: current_blocks_page(uid: $uid, locale: "no") {
+ url: original_url
+ }
+ sv: current_blocks_page(uid: $uid, locale: "sv") {
+ url: original_url
+ }
+}
+
diff --git a/types/components/current/header.ts b/types/components/current/header.ts
index 2b626d5c1..598ae1f04 100644
--- a/types/components/current/header.ts
+++ b/types/components/current/header.ts
@@ -1,3 +1,3 @@
export type HeaderProps = {
- pathname: string
+ uid: string
}
diff --git a/types/components/current/header/mainMenu.ts b/types/components/current/header/mainMenu.ts
index 5784692ee..8e470f48a 100644
--- a/types/components/current/header/mainMenu.ts
+++ b/types/components/current/header/mainMenu.ts
@@ -1,10 +1,13 @@
import type { HeaderLink, TopMenuHeaderLink } from "@/types/requests/header"
import type { Image } from "@/types/image"
+import type { LanguageSwitcherQueryData } from "@/types/requests/languageSwitcher"
export type MainMenuProps = {
+ currentLanguage: string
frontpageLinkText: string
homeHref: string
links: HeaderLink[]
logo: Image
topMenuMobileLinks: TopMenuHeaderLink[]
+ urls: LanguageSwitcherQueryData
}
diff --git a/types/components/current/header/topMenu.ts b/types/components/current/header/topMenu.ts
index bda691693..f9bf51af1 100644
--- a/types/components/current/header/topMenu.ts
+++ b/types/components/current/header/topMenu.ts
@@ -1,7 +1,10 @@
+import type { LanguageSwitcherQueryData } from "@/types/requests/languageSwitcher"
import type { TopMenuHeaderLink } from "@/types/requests/header"
export type TopMenuProps = {
+ currentLanguage: string
frontpageLinkText: string
homeHref: string
links: TopMenuHeaderLink[]
+ urls: LanguageSwitcherQueryData
}
diff --git a/types/components/current/languageSwitcher.ts b/types/components/current/languageSwitcher.ts
index f102cb80e..a4d06428f 100644
--- a/types/components/current/languageSwitcher.ts
+++ b/types/components/current/languageSwitcher.ts
@@ -1,3 +1,5 @@
+import type { LanguageSwitcherQueryData } from "@/types/requests/languageSwitcher"
+
export type LanguageSwitcherLink = {
href: string
title: string
@@ -5,5 +7,5 @@ export type LanguageSwitcherLink = {
export type LanguageSwitcherProps = {
currentLanguage: string
- links: LanguageSwitcherLink[]
+ urls: LanguageSwitcherQueryData
}
diff --git a/types/requests/languageSwitcher.ts b/types/requests/languageSwitcher.ts
new file mode 100644
index 000000000..f8e56108e
--- /dev/null
+++ b/types/requests/languageSwitcher.ts
@@ -0,0 +1,11 @@
+type LanguageResult = {
+ url: string
+}
+
+export type LanguageSwitcherQueryData = {
+ de: LanguageResult | undefined
+ en: LanguageResult | undefined
+ fi: LanguageResult | undefined
+ no: LanguageResult | undefined
+ sv: LanguageResult | undefined
+}