Merged in feat/book-245-preferred-lang-redirect (pull request #2861)

Feat/book 245 preferred lang redirect

* added cookie to save preferredLang and middleware to route accordingly

* Cleaned up code, added noValidLang.ts middleware

* cleaned a little more

* Added headers in languageRedirect and set language cookie maxAge to 1 year


Approved-by: Linus Flood
This commit is contained in:
emma.zettervall
2025-09-26 08:00:25 +00:00
parent 1746ed9803
commit b72f4c71e3
5 changed files with 70 additions and 21 deletions

View File

@@ -1,7 +1,6 @@
import * as Sentry from "@sentry/nextjs"
import { type NextMiddleware, NextResponse } from "next/server"
import { Lang } from "@scandic-hotels/common/constants/language"
import { logger } from "@scandic-hotels/common/logger"
import { findLang } from "@scandic-hotels/common/utils/languages"
@@ -17,8 +16,10 @@ import * as familyAndFriends from "@/middlewares/familyAndFriends"
import * as handleAuth from "@/middlewares/handleAuth"
import * as handleDTMC from "@/middlewares/handleDTMC"
import * as invalidUrl from "@/middlewares/invalidUrl"
import * as languageRedirect from "@/middlewares/languageRedirect"
import * as legacySearchParams from "@/middlewares/legacySearchParams"
import * as myPages from "@/middlewares/myPages"
import * as noValidLang from "@/middlewares/noValidLang"
import * as redirect from "@/middlewares/redirect"
import * as sasXScandic from "@/middlewares/sasXScandic"
import * as trailingSlash from "@/middlewares/trailingSlash"
@@ -33,28 +34,10 @@ export const middleware: NextMiddleware = async (request, event) => {
const headers = getDefaultRequestHeaders(request)
const lang = findLang(request.nextUrl.pathname)
if (!lang) {
// Lang is required for all our middleware.
// Without it we shortcircuit early.
// We use middleware-error route because notFound() requires a root layout
// which we do not want. We can move to that once all Current stuff is gone.
// Default to English if no lang is found.
headers.set("x-lang", Lang.en)
return NextResponse.rewrite(
new URL(`/${Lang.en}/middleware-error/404`, request.nextUrl),
{
request: {
headers,
},
status: 404,
statusText: "Not found",
}
)
}
// Note that the order of middlewares is important since that is the order they are matched by.
const middlewares = [
languageRedirect,
noValidLang,
invalidUrl,
trailingSlash,
currentWebLogin,