Merged in fix/SW-2457-destination-page-search-for-countries (pull request #1873)
* fix: able to search for countries on destinationpage * fix: filter out only desired types when using autocomplete Approved-by: Linus Flood
This commit is contained in:
@@ -6,6 +6,7 @@ export type DestinationsAutoCompleteOutput = {
|
||||
hits: {
|
||||
hotels: AutoCompleteLocation[]
|
||||
cities: AutoCompleteLocation[]
|
||||
countries: AutoCompleteLocation[]
|
||||
}
|
||||
currentSelection: {
|
||||
hotel: (AutoCompleteLocation & { type: "hotels" }) | null
|
||||
@@ -16,27 +17,50 @@ export type DestinationsAutoCompleteOutput = {
|
||||
export function filterAndCategorizeAutoComplete({
|
||||
locations,
|
||||
query,
|
||||
includeTypes,
|
||||
}: {
|
||||
locations: AutoCompleteLocation[]
|
||||
query: string
|
||||
includeTypes: ("cities" | "hotels" | "countries")[]
|
||||
}) {
|
||||
const rankedLocations = filterAutoCompleteLocations(locations, query)
|
||||
|
||||
const sortedCities = rankedLocations.filter(isCity)
|
||||
const sortedHotels = rankedLocations.filter(isHotel)
|
||||
const sortedCities = rankedLocations.filter(
|
||||
(loc) => shouldIncludeType(includeTypes, loc) && isCity(loc)
|
||||
)
|
||||
const sortedHotels = rankedLocations.filter(
|
||||
(loc) => shouldIncludeType(includeTypes, loc) && isHotel(loc)
|
||||
)
|
||||
const sortedCountries = rankedLocations.filter(
|
||||
(loc) => shouldIncludeType(includeTypes, loc) && isCountry(loc)
|
||||
)
|
||||
|
||||
return {
|
||||
cities: sortedCities,
|
||||
hotels: sortedHotels,
|
||||
countries: sortedCountries,
|
||||
}
|
||||
}
|
||||
|
||||
function shouldIncludeType(
|
||||
includedTypes: ("cities" | "hotels" | "countries")[],
|
||||
location: AutoCompleteLocation
|
||||
) {
|
||||
return includedTypes.includes(location.type)
|
||||
}
|
||||
|
||||
function isHotel(
|
||||
location: AutoCompleteLocation | null | undefined
|
||||
): location is AutoCompleteLocation & { type: "hotels" } {
|
||||
return !!location && location.type === "hotels"
|
||||
}
|
||||
|
||||
function isCountry(
|
||||
location: AutoCompleteLocation | null | undefined
|
||||
): location is AutoCompleteLocation & { type: "countries" } {
|
||||
return !!location && location.type === "countries"
|
||||
}
|
||||
|
||||
function isCity(
|
||||
location: AutoCompleteLocation | null | undefined
|
||||
): location is AutoCompleteLocation & { type: "cities" } {
|
||||
|
||||
Reference in New Issue
Block a user