feat(BOOK-55): Listen to SEO filter slugs when navigating to such page

Approved-by: Chuma Mcphoy (We Ahead)
Approved-by: Matilda Landström
This commit is contained in:
Erik Tiekstra
2025-09-24 10:40:58 +00:00
parent f3b6c4a089
commit af4f544b8a
15 changed files with 141 additions and 61 deletions

View File

@@ -1,5 +1,7 @@
import type { FacilityEnum } from "@scandic-hotels/common/constants/facilities"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { SEOFilters } from "../types/destinationsData"
import type {
CategorizedHotelFilters,
HotelFilter,
@@ -33,6 +35,39 @@ function sortFilters(filters: HotelFilter[]): HotelFilter[] {
})
}
// Merges hotel and SEO filters, removing duplicates (by id).
// In case of duplicates, the SEO filter takes precedence.
function mergeAndDeduplicate(
hotelFilters: HotelFilter[],
seoFilters: HotelFilter[]
): HotelFilter[] {
const map = new Map<FacilityEnum, HotelFilter>()
hotelFilters.forEach((filter) => map.set(filter.id, filter))
seoFilters.forEach((filter) => map.set(filter.id, filter))
return Array.from(map.values())
}
export function mergeHotelFiltersAndSeoFilters(
hotelFilters: CategorizedHotelFilters,
seoFilters: SEOFilters | null
): CategorizedHotelFilters {
if (!seoFilters) {
return hotelFilters
}
return {
...hotelFilters,
facilityFilters: mergeAndDeduplicate(
hotelFilters.facilityFilters,
seoFilters.facilityFilters
),
surroundingsFilters: mergeAndDeduplicate(
hotelFilters.surroundingsFilters,
seoFilters.surroundingsFilters
),
}
}
export function getFiltersFromHotels(
hotels: HotelListingHotelData[],
lang: Lang