Merged in feat/SW-1751-destination-0-results (pull request #1448)

feat(SW-1751): Added alert if no results are found, also implemented default location data from Contentstack

* feat(SW-1751): Added alert if no results are found, also implemented default location data from Contentstack


Approved-by: Matilda Landström
This commit is contained in:
Erik Tiekstra
2025-03-03 10:32:40 +00:00
parent c3e3fa62ec
commit 93187a9c33
31 changed files with 372 additions and 206 deletions

View File

@@ -10,6 +10,7 @@ import {
} from "../schemas/blocks/accordion"
import { contentRefsSchema, contentSchema } from "../schemas/blocks/content"
import { tempImageVaultAssetSchema } from "../schemas/imageVault"
import { mapLocationSchema } from "../schemas/mapLocation"
import {
linkRefsUnionSchema,
linkUnionSchema,
@@ -24,6 +25,39 @@ import {
} from "@/types/components/tracking"
import { DestinationCityPageEnum } from "@/types/enums/destinationCityPage"
const destinationCityPageDestinationSettingsSchema = z
.object({
city_denmark: z.string().optional().nullable(),
city_finland: z.string().optional().nullable(),
city_germany: z.string().optional().nullable(),
city_poland: z.string().optional().nullable(),
city_norway: z.string().optional().nullable(),
city_sweden: z.string().optional().nullable(),
location: mapLocationSchema,
})
.transform(
({
city_denmark,
city_finland,
city_germany,
city_norway,
city_poland,
city_sweden,
location,
}) => {
const cities = [
city_denmark,
city_finland,
city_germany,
city_poland,
city_norway,
city_sweden,
].filter((city): city is string => Boolean(city))
return { city: cities[0], location }
}
)
export const destinationCityListDataSchema = z
.object({
all_destination_city_page: z.object({
@@ -31,36 +65,7 @@ export const destinationCityListDataSchema = z
z
.object({
heading: z.string(),
destination_settings: z
.object({
city_denmark: z.string().optional().nullable(),
city_finland: z.string().optional().nullable(),
city_germany: z.string().optional().nullable(),
city_poland: z.string().optional().nullable(),
city_norway: z.string().optional().nullable(),
city_sweden: z.string().optional().nullable(),
})
.transform(
({
city_denmark,
city_finland,
city_germany,
city_norway,
city_poland,
city_sweden,
}) => {
const cities = [
city_denmark,
city_finland,
city_germany,
city_poland,
city_norway,
city_sweden,
].filter((city): city is string => Boolean(city))
return { city: cities[0] }
}
),
destination_settings: destinationCityPageDestinationSettingsSchema,
sort_order: z.number().nullable(),
preamble: z.string(),
experiences: z
@@ -112,71 +117,11 @@ export const blocksSchema = z.discriminatedUnion("__typename", [
destinationCityPageContent,
])
export const destinationCityPageDestinationSettingsSchema = z
.object({
city_denmark: z.string().optional().nullable(),
city_finland: z.string().optional().nullable(),
city_germany: z.string().optional().nullable(),
city_poland: z.string().optional().nullable(),
city_norway: z.string().optional().nullable(),
city_sweden: z.string().optional().nullable(),
})
.transform(
({
city_denmark,
city_finland,
city_germany,
city_norway,
city_poland,
city_sweden,
}) => {
const cities = [
city_denmark,
city_finland,
city_germany,
city_poland,
city_norway,
city_sweden,
].filter((city): city is string => Boolean(city))
return { city: cities[0] }
}
)
export const destinationCityPageSchema = z
.object({
destination_city_page: z.object({
title: z.string(),
destination_settings: z
.object({
city_denmark: z.string().optional().nullable(),
city_finland: z.string().optional().nullable(),
city_germany: z.string().optional().nullable(),
city_poland: z.string().optional().nullable(),
city_norway: z.string().optional().nullable(),
city_sweden: z.string().optional().nullable(),
})
.transform(
({
city_denmark,
city_finland,
city_germany,
city_norway,
city_poland,
city_sweden,
}) => {
const cities = [
city_denmark,
city_finland,
city_germany,
city_poland,
city_norway,
city_sweden,
].filter((city): city is string => Boolean(city))
return { city: cities[0] }
}
),
destination_settings: destinationCityPageDestinationSettingsSchema,
heading: z.string(),
preamble: z.string(),
experiences: z
@@ -254,36 +199,7 @@ export const cityPageUrlsSchema = z
z
.object({
url: z.string(),
destination_settings: z
.object({
city_denmark: z.string().optional().nullable(),
city_finland: z.string().optional().nullable(),
city_germany: z.string().optional().nullable(),
city_poland: z.string().optional().nullable(),
city_norway: z.string().optional().nullable(),
city_sweden: z.string().optional().nullable(),
})
.transform(
({
city_denmark,
city_finland,
city_germany,
city_norway,
city_poland,
city_sweden,
}) => {
const cities = [
city_denmark,
city_finland,
city_germany,
city_poland,
city_norway,
city_sweden,
].filter((city): city is string => Boolean(city))
return { city: cities[0] }
}
),
destination_settings: destinationCityPageDestinationSettingsSchema,
system: systemSchema,
})
.transform((data) => {

View File

@@ -10,6 +10,7 @@ import {
} from "../schemas/blocks/accordion"
import { contentRefsSchema, contentSchema } from "../schemas/blocks/content"
import { tempImageVaultAssetSchema } from "../schemas/imageVault"
import { mapLocationSchema } from "../schemas/mapLocation"
import {
linkRefsUnionSchema,
linkUnionSchema,
@@ -52,6 +53,7 @@ export const destinationCountryPageSchema = z
title: z.string(),
destination_settings: z.object({
country: z.nativeEnum(Country),
location: mapLocationSchema,
}),
heading: z.string(),
preamble: z.string(),

View File

@@ -6,6 +6,7 @@ import {
cardGalleryRefsSchema,
cardGallerySchema,
} from "../schemas/blocks/cardGallery"
import { mapLocationSchema } from "../schemas/mapLocation"
import { systemSchema } from "../schemas/system"
import { DestinationOverviewPageEnum } from "@/types/enums/destinationOverviewPage"
@@ -26,6 +27,7 @@ export const destinationOverviewPageSchema = z.object({
destination_overview_page: z.object({
title: z.string(),
blocks: discriminatedUnionArray(blocksSchema.options),
location: mapLocationSchema,
system: systemSchema.merge(
z.object({
created_at: z.string(),

View File

@@ -0,0 +1,25 @@
import { z } from "zod"
export const mapLocationSchema = z
.object({
longitude: z.number().nullable(),
latitude: z.number().nullable(),
default_zoom: z.number().nullable(),
})
.nullish()
.transform((val) => {
if (val) {
const longitude = val.longitude
const latitude = val.latitude
const default_zoom = val.default_zoom || 3
if (longitude !== null && latitude !== null) {
return {
longitude,
latitude,
default_zoom: Math.round(default_zoom),
}
}
}
return null
})