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:
26
apps/scandic-web/middlewares/languageRedirect.ts
Normal file
26
apps/scandic-web/middlewares/languageRedirect.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import { type NextMiddleware, NextResponse } from "next/server"
|
||||
|
||||
import { Lang } from "@scandic-hotels/common/constants/language"
|
||||
|
||||
import { getDefaultRequestHeaders } from "./utils"
|
||||
|
||||
import type { MiddlewareMatcher } from "@/types/middleware"
|
||||
|
||||
export const middleware: NextMiddleware = (request) => {
|
||||
const headers = getDefaultRequestHeaders(request)
|
||||
const preferredLang = request.cookies.get("preferredLang")?.value ?? Lang.en
|
||||
|
||||
// Set x-lang header
|
||||
headers.set("x-lang", preferredLang)
|
||||
|
||||
// Redirect to new URL if no lang in URL
|
||||
const newUrl = new URL(`/${preferredLang}`, request.url)
|
||||
return NextResponse.redirect(newUrl, {
|
||||
headers,
|
||||
})
|
||||
}
|
||||
|
||||
export const matcher: MiddlewareMatcher = (request) => {
|
||||
// if ULR is empty
|
||||
return request.nextUrl.pathname.length <= 1
|
||||
}
|
||||
29
apps/scandic-web/middlewares/noValidLang.ts
Normal file
29
apps/scandic-web/middlewares/noValidLang.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { type NextMiddleware, NextResponse } from "next/server"
|
||||
|
||||
import { Lang } from "@scandic-hotels/common/constants/language"
|
||||
import { findLang } from "@scandic-hotels/common/utils/languages"
|
||||
|
||||
import { getDefaultRequestHeaders } from "./utils"
|
||||
|
||||
import type { MiddlewareMatcher } from "@/types/middleware"
|
||||
|
||||
export const middleware: NextMiddleware = (request) => {
|
||||
const headers = getDefaultRequestHeaders(request)
|
||||
|
||||
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",
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
export const matcher: MiddlewareMatcher = (request) => {
|
||||
const lang = findLang(request.nextUrl.pathname)
|
||||
return !lang
|
||||
}
|
||||
Reference in New Issue
Block a user