diff --git a/app/[lang]/(live-current)/layout.tsx b/app/[lang]/(live-current)/layout.tsx
index 529c754fe..2f601ff6c 100644
--- a/app/[lang]/(live-current)/layout.tsx
+++ b/app/[lang]/(live-current)/layout.tsx
@@ -1,10 +1,10 @@
/* eslint-disable @next/next/no-css-tags */
+import AdobeScript from "@/components/Current/AdobeScript"
import Footer from "@/components/Current/Footer"
import LangPopup from "@/components/Current/LangPopup"
import Script from "next/script"
import SkipToMainContent from "@/components/SkipToMainContent"
-import AdobeScript from "../AdobeScript"
import type { Metadata } from "next"
import type { LangParams, LayoutArgs } from "@/types/params"
@@ -21,8 +21,8 @@ export default function RootLayout({
return (
-
-
+
+
- )
+ return
} catch (error) {
// TODO: throw 500
console.error(error)
diff --git a/app/api/revalidate/route.ts b/app/api/revalidate/route.ts
new file mode 100644
index 000000000..4b03903f5
--- /dev/null
+++ b/app/api/revalidate/route.ts
@@ -0,0 +1,45 @@
+import { env } from "@/env/server"
+import { revalidateTag } from 'next/cache'
+
+import type { NextRequest } from 'next/server'
+
+export async function POST(request: NextRequest) {
+ try {
+ const secret = request.nextUrl.searchParams.get("secret") ?? ""
+ const tag = request.nextUrl.searchParams.get("tag") ?? ""
+
+ if (secret !== env.REVALIDATE_SECRET) {
+ return Response.json(
+ {
+ message: 'Invalid secret',
+ now: Date.now(),
+ revalidated: false,
+ },
+ {
+ status: 401,
+ }
+ )
+ }
+
+ if (!tag) {
+ return Response.json(
+ {
+ message: 'Missing tag param',
+ now: Date.now(),
+ revalidated: false,
+ },
+ {
+ status: 400,
+ }
+ )
+ }
+
+ revalidateTag(tag)
+
+ return Response.json({ revalidated: true, now: Date.now() })
+ } catch (error) {
+ console.info("Failed to revalidate tag")
+ console.error(error)
+ return Response.json({ revalidated: false, now: Date.now() }, { status: 500 })
+ }
+}
diff --git a/components/Current/Header/LanguageSwitcher/Desktop/index.tsx b/components/Current/Header/LanguageSwitcher/Desktop/index.tsx
index 9182f4182..b36f3e091 100644
--- a/components/Current/Header/LanguageSwitcher/Desktop/index.tsx
+++ b/components/Current/Header/LanguageSwitcher/Desktop/index.tsx
@@ -1,5 +1,5 @@
"use client"
-import { useEffect, useRef, useState } from "react"
+import { useCallback, useEffect, useRef, useState } from "react"
import { languages } from "@/constants/languages"
@@ -18,9 +18,9 @@ export default function Desktop({
setIsOpen(prevIsOpen => !prevIsOpen)
}
- function close() {
+ const close = useCallback(() => {
setIsOpen(false)
- }
+ }, [setIsOpen])
useEffect(() => {
function handleClickOutside(evt: Event) {
@@ -67,6 +67,7 @@ export default function Desktop({
{languages.no}
+ {/* When we have 6 languages in Contenstack, danish url should come from urls.da?.url */}
{languages.da}
diff --git a/components/Current/Header/LanguageSwitcher/Mobile/index.tsx b/components/Current/Header/LanguageSwitcher/Mobile/index.tsx
index 7fd6d7249..c7ae5bee6 100644
--- a/components/Current/Header/LanguageSwitcher/Mobile/index.tsx
+++ b/components/Current/Header/LanguageSwitcher/Mobile/index.tsx
@@ -40,6 +40,7 @@ export default function Mobile({
{languages.no}
+ {/* When we have 6 languages in Contenstack, danish url should come from urls.da?.url */}
{languages.da}
diff --git a/components/Current/Header/MainMenu/index.tsx b/components/Current/Header/MainMenu/index.tsx
index 8f04b7a74..79a7bd6d9 100644
--- a/components/Current/Header/MainMenu/index.tsx
+++ b/components/Current/Header/MainMenu/index.tsx
@@ -95,7 +95,7 @@ export default function MainMenu({
{urls ? (
-
+
) : null}
diff --git a/components/Current/Header/MainMenu/mainMenu.module.css b/components/Current/Header/MainMenu/mainMenu.module.css
index 58dbe87e1..4a2083e3f 100644
--- a/components/Current/Header/MainMenu/mainMenu.module.css
+++ b/components/Current/Header/MainMenu/mainMenu.module.css
@@ -1,12 +1,13 @@
.mainMenu {
background-color: #fff;
background-image: none;
+ box-shadow: 0 0 7px rgba(0, 0, 0, .75);
+ max-height: 100%;
+ overflow: visible;
position: fixed;
top: 0;
- max-height: 100%;
width: 100%;
z-index: 99999;
- overflow: visible;
}
.container {
@@ -217,4 +218,8 @@
display: none;
padding-top: 0px;
}
+
+ .mobileLi {
+ display: none;
+ }
}
\ No newline at end of file
diff --git a/components/Current/Header/index.tsx b/components/Current/Header/index.tsx
index 8a344f687..8e01bd761 100644
--- a/components/Current/Header/index.tsx
+++ b/components/Current/Header/index.tsx
@@ -3,6 +3,8 @@ import { batchRequest } from "@/lib/batchRequest"
import { request } from "@/lib/request"
import { GetHeader } from "@/lib/graphql/Query/Header.graphql"
import { GetDaDeEnUrls, GetFiNoSvUrls } from "@/lib/graphql/Query/LanguageSwitcher.graphql"
+import { homeHrefs } from "@/constants/homeHrefs"
+import { env } from "@/env/server"
import MainMenu from "./MainMenu"
import OfflineBanner from "./OfflineBanner"
@@ -41,7 +43,7 @@ export default async function Header({ lang, uid }: LangParams & HeaderProps) {
}
const currentLanguage = languages[lang]
- const homeHref = `https://www.scandichotels.com/${lang}`
+ const homeHref = homeHrefs[env.NODE_ENV][lang]
const { frontpage_link_text, logoConnection, menu, top_menu } = data.all_header.items[0]
const logo = logoConnection.edges?.[0]?.node
const topMenuMobileLinks = top_menu.links.filter(link => link.show_on_mobile)
diff --git a/constants/homeHrefs.ts b/constants/homeHrefs.ts
new file mode 100644
index 000000000..33fc26087
--- /dev/null
+++ b/constants/homeHrefs.ts
@@ -0,0 +1,27 @@
+
+export const homeHrefs = {
+ development: {
+ da: "https://stage.scandichotels.dk",
+ de: "https://stage.scandichotels.de",
+ en: "https://stage.scandichotels.com",
+ fi: "https://stage.scandichotels.fi",
+ no: "https://stage.scandichotels.no",
+ sv: "https://stage.scandichotels.se",
+ },
+ production: {
+ da: "https://www.scandichotels.dk",
+ de: "https://www.scandichotels.de",
+ en: "https://www.scandichotels.com",
+ fi: "https://www.scandichotels.fi",
+ no: "https://www.scandichotels.no",
+ sv: "https://www.scandichotels.se",
+ },
+ test: {
+ da: "https://test2.scandichotels.dk",
+ de: "https://test2.scandichotels.de",
+ en: "https://test2.scandichotels.com",
+ fi: "https://test2.scandichotels.fi",
+ no: "https://test2.scandichotels.no",
+ sv: "https://test2.scandichotels.se",
+ },
+}
diff --git a/env/server.ts b/env/server.ts
index 9e17194a9..c6c658b80 100644
--- a/env/server.ts
+++ b/env/server.ts
@@ -11,6 +11,7 @@ export const env = createEnv({
CMS_PREVIEW_TOKEN: z.string(),
NODE_ENV: z.enum(["development", "test", "production"]),
PRINT_QUERY: z.boolean().default(false),
+ REVALIDATE_SECRET: z.string(),
},
emptyStringAsUndefined: true,
runtimeEnv: {
@@ -22,5 +23,6 @@ export const env = createEnv({
CMS_PREVIEW_TOKEN: process.env.CMS_PREVIEW_TOKEN,
NODE_ENV: process.env.NODE_ENV,
PRINT_QUERY: process.env.PRINT_QUERY,
+ REVALIDATE_SECRET: process.env.REVALIDATE_SECRET,
},
})
diff --git a/lib/request.ts b/lib/request.ts
index abd365a3e..8562c03a4 100644
--- a/lib/request.ts
+++ b/lib/request.ts
@@ -6,18 +6,22 @@ import { cache } from "react"
import type { Data } from "@/types/request"
import type { DocumentNode } from "graphql"
+const client = new GraphQLClient(env.CMS_URL, {
+ fetch: cache(async function (url: URL | RequestInfo, params: RequestInit | undefined) {
+ return fetch(url, params)
+ }),
+})
+
export async function request(
query: string | DocumentNode,
variables?: {},
next?: NextFetchRequestConfig
): Promise> {
try {
- const client = new GraphQLClient(env.CMS_URL, {
- fetch: cache(async function (url: URL | RequestInfo, params: RequestInit | undefined) {
- return fetch(url, params)
- }),
- next,
- })
+
+ if (next) {
+ client.requestConfig.next = next
+ }
if (env.PRINT_QUERY) {
const print = (await import("graphql/language/printer")).print