Merged in feat/BOOK-434-users-should-redirect-to- (pull request #3154)

* feat(BOOK-434): Moved redirect to middleware layer
* feat(BOOK-434): Updated to handle no filters available scenario

Approved-by: Erik Tiekstra
This commit is contained in:
Hrishikesh Vaipurkar
2025-11-14 09:51:44 +00:00
parent 3d121be74a
commit f23652b929
7 changed files with 85 additions and 24 deletions

View File

@@ -1,4 +1,4 @@
import { notFound, redirect } from "next/navigation"
import { notFound } from "next/navigation"
import { Suspense } from "react"
import {
@@ -69,11 +69,6 @@ export default async function DestinationCityPage({
const activeSeoFilter = getActiveSeoFilter(seo_filters, filterFromUrl)
if (filterFromUrl && !activeSeoFilter) {
const updatedPathname = pathname.replace(`/${filterFromUrl}`, "")
return redirect(`${updatedPathname}${isMapView ? "?view=map" : ""}`)
}
const allHotels = await getHotelsByCityIdentifier(cityIdentifier)
const hotelFilters = getFiltersFromHotels(allHotels, lang)

View File

@@ -1,4 +1,4 @@
import { notFound, redirect } from "next/navigation"
import { notFound } from "next/navigation"
import { Suspense } from "react"
import {
@@ -70,11 +70,6 @@ export default async function DestinationCountryPage({
const activeSeoFilter = getActiveSeoFilter(seo_filters, filterFromUrl)
if (filterFromUrl && !activeSeoFilter) {
const updatedPathname = pathname.replace(`/${filterFromUrl}`, "")
return redirect(`${updatedPathname}${isMapView ? "?view=map" : ""}`)
}
const [allHotels, allCities] = await Promise.all([
getHotelsByCountry(destination_settings.country),
getDestinationCityPagesByCountry(destination_settings.country),

View File

@@ -40,8 +40,11 @@ export const middleware: NextMiddleware = async (request) => {
if (incomingPathNameParts.length >= 2) {
const subpage = incomingPathNameParts.pop()
if (subpage) {
const { contentType: parentContentType, uid: parentUid } =
await getUidAndContentTypeByPath(incomingPathNameParts.join("/"))
const {
contentType: parentContentType,
seoFilters,
uid: parentUid,
} = await getUidAndContentTypeByPath(incomingPathNameParts.join("/"))
if (parentUid) {
switch (parentContentType) {
@@ -53,8 +56,18 @@ export const middleware: NextMiddleware = async (request) => {
break
case PageContentTypeEnum.destinationCityPage:
case PageContentTypeEnum.destinationCountryPage:
// E.g. Active filters inside destination pages to filter hotels.
// Validate Seo Filters from CMS and redirect if not found
if (!seoFilters?.includes(subpage)) {
return NextResponse.redirect(
new URL(incomingPathNameParts.join("/"), nextUrl),
{
status: 301,
}
)
}
// E.g. Active Seo filters inside destination pages to filter hotels.
searchParams.set("filterFromUrl", subpage)
contentType = parentContentType
uid = parentUid
break