feat(SW-3151): Added original to imageSchema and added transform to a more generic image type

Approved-by: Bianca Widstam
Approved-by: Chuma Mcphoy (We Ahead)
Approved-by: Matilda Landström
This commit is contained in:
Erik Tiekstra
2025-09-10 08:29:05 +00:00
parent a5790ee454
commit f04fe467da
35 changed files with 182 additions and 201 deletions

View File

@@ -526,7 +526,7 @@ export const ancillaryPackagesSchema = z
id: item.id,
title: item.title,
description: item.descriptions.html,
imageUrl: item.images[0]?.imageSizes.small || undefined,
imageUrl: item.images[0]?.src || undefined,
price: {
total: item.variants.ancillary.price.totalPrice,
currency: item.variants.ancillary.price.currency,

View File

@@ -2,46 +2,37 @@ import { z } from "zod"
import { nullableStringValidator } from "@scandic-hotels/common/utils/zod/stringValidator"
export const imageSizesSchema = z.object({
large: nullableStringValidator,
medium: nullableStringValidator,
small: nullableStringValidator,
tiny: nullableStringValidator,
})
export const imageMetaDataSchema = z.object({
altText: nullableStringValidator,
altText_En: nullableStringValidator,
copyRight: nullableStringValidator,
title: nullableStringValidator,
title_En: nullableStringValidator,
})
const DEFAULT_IMAGE_OBJ = {
metaData: {
altText: "Default image",
altText_En: "Default image",
copyRight: "Default image",
title: "Default image",
title_En: "Default image",
},
imageSizes: {
tiny: "https://placehold.co/1280x720",
small: "https://placehold.co/1280x720",
medium: "https://placehold.co/1280x720",
large: "https://placehold.co/1280x720",
},
altText: "Default image",
altText_En: "Default image",
title: "Default image",
title_En: "Default image",
src: "https://placehold.co/1280x720",
}
export const imageSchema = z
.object({
imageSizes: imageSizesSchema,
metaData: imageMetaDataSchema,
imageSizes: z.object({
original: nullableStringValidator,
}),
metaData: z.object({
altText: nullableStringValidator,
altText_En: nullableStringValidator,
copyRight: nullableStringValidator,
title: nullableStringValidator,
title_En: nullableStringValidator,
}),
})
.nullish()
.transform((val) => {
if (!val) {
return DEFAULT_IMAGE_OBJ
}
return val
return {
src: val.imageSizes.original,
altText: val.metaData.altText,
altText_En: val.metaData.altText_En,
title: val.metaData.title,
title_En: val.metaData.title_En,
}
})

View File

@@ -5,7 +5,7 @@ import { CurrencyEnum } from "@scandic-hotels/common/constants/currency"
import { BreakfastPackageEnum } from "../../../enums/breakfast"
import { PackageTypeEnum } from "../../../enums/packages"
import { RoomPackageCodeEnum } from "../../../enums/roomFilter"
import { imageSizesSchema } from "./image"
import { imageSchema } from "./image"
// TODO: Remove optional and default when the API change has been deployed
export const packagePriceSchema = z
@@ -38,7 +38,7 @@ export const ancillaryContentSchema = z.object({
}),
title: z.string(),
descriptions: z.object({ html: z.string() }),
images: z.array(z.object({ imageSizes: imageSizesSchema })),
images: z.array(imageSchema),
requiresDeliveryTime: z.boolean(),
})