feat(BOOK-463): Fetching hotel filters from CMS and using these inside the destination pages and select hotel page
* feat(BOOK-463): Fetching hotel filters from CMS and using these inside the destination pages * fix(BOOK-698): fetch hotel filters from CMS on select hotel page Approved-by: Bianca Widstam
This commit is contained in:
@@ -1,16 +1,13 @@
|
||||
import { ApiCountry } from "../../../types/country"
|
||||
import { HotelSortOption } from "../../../types/hotel"
|
||||
import {
|
||||
getFiltersFromHotels,
|
||||
mergeHotelFiltersAndSeoFilters,
|
||||
} from "../../../utils/getFiltersFromHotels"
|
||||
import { getSortedCities } from "../../../utils/getSortedCities"
|
||||
import { mergeHotelFiltersAndSeoFilters } from "../../../utils/mergeHotelFiltersAndSeoFilters"
|
||||
import { getHotelFilters } from "../../hotels/filters/utils"
|
||||
import {
|
||||
getCityByCityIdentifier,
|
||||
getHotelIdsByCityIdentifier,
|
||||
} from "../../hotels/services/getCityByCityIdentifier"
|
||||
import { getHotelIdsByCountry } from "../../hotels/services/getHotelIdsByCountry"
|
||||
import { getHotelsByHotelIds } from "../../hotels/services/getHotelsByHotelIds"
|
||||
import { getCityPages } from "../destinationCountryPage/utils"
|
||||
import { transformDestinationFiltersResponse } from "../schemas/destinationFilters"
|
||||
|
||||
@@ -62,11 +59,9 @@ export async function getCityData(
|
||||
serviceToken
|
||||
)
|
||||
|
||||
const hotels = await getHotelsByHotelIds({ hotelIds, lang, serviceToken })
|
||||
|
||||
let filterType
|
||||
if (filter) {
|
||||
const hotelFilters = getFiltersFromHotels(hotels, lang)
|
||||
const hotelFilters = await getHotelFilters(lang)
|
||||
const allFilters = mergeHotelFiltersAndSeoFilters(
|
||||
hotelFilters,
|
||||
seoFilters
|
||||
@@ -104,6 +99,7 @@ export async function getCountryData(
|
||||
lang: Lang
|
||||
) {
|
||||
const country = data.destination_settings?.country
|
||||
const seoFilters = transformDestinationFiltersResponse(data.seo_filters)
|
||||
const filter = input.filterFromUrl
|
||||
|
||||
if (country) {
|
||||
@@ -117,10 +113,13 @@ export async function getCountryData(
|
||||
serviceToken,
|
||||
})
|
||||
|
||||
const hotels = await getHotelsByHotelIds({ hotelIds, lang, serviceToken })
|
||||
|
||||
if (filter) {
|
||||
const allFilters = getFiltersFromHotels(hotels, lang)
|
||||
const hotelFilters = await getHotelFilters(lang)
|
||||
const allFilters = mergeHotelFiltersAndSeoFilters(
|
||||
hotelFilters,
|
||||
seoFilters
|
||||
)
|
||||
|
||||
const facilityFilter = allFilters.facilityFilters.find(
|
||||
(f) => f.slug === filter
|
||||
)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { z } from "zod"
|
||||
|
||||
import { FacilityEnum } from "@scandic-hotels/common/constants/facilities"
|
||||
import { isDefined } from "@scandic-hotels/common/utils/isDefined"
|
||||
|
||||
import { DestinationFilterBlocksEnum } from "../../../types/destinationsData"
|
||||
import { discriminatedUnionArray } from "../../../utils/discriminatedUnion"
|
||||
import { hotelFilterSchema } from "../../hotels/filters/output"
|
||||
import { accordionSchema } from "./blocks/accordion"
|
||||
import { contentSchema } from "./blocks/content"
|
||||
import { systemSchema } from "./system"
|
||||
@@ -37,12 +37,7 @@ export const destinationFilterSchema = z.object({
|
||||
filterConnection: z.object({
|
||||
edges: z.array(
|
||||
z.object({
|
||||
node: z.object({
|
||||
title: z.string(),
|
||||
facility_id: z.nativeEnum(FacilityEnum).catch(FacilityEnum.UNKNOWN),
|
||||
category: z.string(),
|
||||
slug: z.string(),
|
||||
}),
|
||||
node: hotelFilterSchema,
|
||||
})
|
||||
),
|
||||
}),
|
||||
@@ -84,13 +79,7 @@ export function transformDestinationFiltersResponse(
|
||||
heading,
|
||||
preamble,
|
||||
blocks,
|
||||
filter: {
|
||||
id: filter.facility_id,
|
||||
name: filter.title,
|
||||
filterType: filter.category,
|
||||
slug: filter.slug,
|
||||
sortOrder: 0,
|
||||
},
|
||||
filter,
|
||||
}
|
||||
})
|
||||
.filter(isDefined)
|
||||
|
||||
Reference in New Issue
Block a user