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:
@@ -69,6 +69,17 @@ export const EntryByUrlBatch2 = gql`
|
||||
}
|
||||
all_destination_country_page(where: { url: $url }, locale: $locale) {
|
||||
items {
|
||||
seo_filters {
|
||||
filterConnection {
|
||||
edges {
|
||||
node {
|
||||
... on HotelFilter {
|
||||
slug
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
system {
|
||||
...System
|
||||
}
|
||||
@@ -77,6 +88,17 @@ export const EntryByUrlBatch2 = gql`
|
||||
}
|
||||
all_destination_city_page(where: { url: $url }, locale: $locale) {
|
||||
items {
|
||||
seo_filters {
|
||||
filterConnection {
|
||||
edges {
|
||||
node {
|
||||
... on HotelFilter {
|
||||
slug
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
system {
|
||||
...System
|
||||
}
|
||||
|
||||
@@ -11,10 +11,10 @@ export const getUidAndContentTypeByPath = async (pathname: string) => {
|
||||
|
||||
const contentTypePathName = pathWithoutTrailingSlash.replace(`/${lang}`, "")
|
||||
|
||||
const { contentType, uid, error } = await resolveEntry(
|
||||
const { contentType, seoFilters, uid, error } = await resolveEntry(
|
||||
contentTypePathName,
|
||||
lang ?? Lang.en
|
||||
)
|
||||
|
||||
return { contentType, uid, error }
|
||||
return { contentType, seoFilters, uid, error }
|
||||
}
|
||||
|
||||
@@ -1,12 +1,37 @@
|
||||
import z from "zod"
|
||||
|
||||
const baseResolveSchema = z.object({
|
||||
system: z.object({
|
||||
content_type_uid: z.string(),
|
||||
uid: z.string(),
|
||||
}),
|
||||
})
|
||||
|
||||
const entryResolveSchema = z.object({
|
||||
items: z.array(baseResolveSchema),
|
||||
total: z.number(),
|
||||
})
|
||||
|
||||
const allDestinationPageResolveSchema = z.object({
|
||||
items: z.array(
|
||||
z.object({
|
||||
system: z.object({
|
||||
content_type_uid: z.string(),
|
||||
uid: z.string(),
|
||||
}),
|
||||
baseResolveSchema.extend({
|
||||
seo_filters: z
|
||||
.array(
|
||||
z.object({
|
||||
filterConnection: z.object({
|
||||
edges: z
|
||||
.array(
|
||||
z.object({
|
||||
node: z.object({
|
||||
slug: z.string(),
|
||||
}),
|
||||
})
|
||||
)
|
||||
.nullish(),
|
||||
}),
|
||||
})
|
||||
)
|
||||
.nullish(),
|
||||
})
|
||||
),
|
||||
total: z.number(),
|
||||
@@ -22,8 +47,8 @@ export const validateEntryResolveSchema = z.object({
|
||||
all_current_blocks_page: entryResolveSchema,
|
||||
all_hotel_page: entryResolveSchema,
|
||||
all_destination_overview_page: entryResolveSchema,
|
||||
all_destination_country_page: entryResolveSchema,
|
||||
all_destination_city_page: entryResolveSchema,
|
||||
all_destination_country_page: allDestinationPageResolveSchema,
|
||||
all_destination_city_page: allDestinationPageResolveSchema,
|
||||
all_start_page: entryResolveSchema,
|
||||
all_promo_campaign_page: entryResolveSchema,
|
||||
})
|
||||
|
||||
@@ -54,6 +54,17 @@ export async function resolve(url: string, lang = Lang.en) {
|
||||
for (const value of Object.values(validatedData.data)) {
|
||||
if (value.total) {
|
||||
const { content_type_uid, uid } = value.items[0].system
|
||||
const seoFilters =
|
||||
"seo_filters" in value.items[0] ? value.items[0].seo_filters : null
|
||||
if (seoFilters && seoFilters.length > 0) {
|
||||
return {
|
||||
contentType: content_type_uid,
|
||||
uid,
|
||||
seoFilters: seoFilters.flatMap((f) =>
|
||||
f.filterConnection.edges?.flatMap((e) => e.node.slug)
|
||||
),
|
||||
}
|
||||
}
|
||||
return {
|
||||
contentType: content_type_uid,
|
||||
uid,
|
||||
|
||||
Reference in New Issue
Block a user