72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import { imageSchema } from "./image"
|
|
|
|
const specialNeedSchema = z.object({
|
|
name: z.string(),
|
|
details: z.string(),
|
|
})
|
|
|
|
const specialNeedGroupSchema = z.object({
|
|
name: z.string(),
|
|
specialNeeds: z.array(specialNeedSchema),
|
|
})
|
|
|
|
export const gallerySchema = z.object({
|
|
heroImages: z.array(imageSchema),
|
|
smallerImages: z.array(imageSchema),
|
|
})
|
|
|
|
export const facilitySchema = z.object({
|
|
headingText: z.string().default(""),
|
|
heroImages: z.array(imageSchema),
|
|
})
|
|
|
|
export const restaurantsOverviewPageSchema = z.object({
|
|
restaurantsOverviewPageLinkText: z.string().optional(),
|
|
restaurantsOverviewPageLink: z.string().optional(),
|
|
restaurantsContentDescriptionShort: z.string().optional(),
|
|
restaurantsContentDescriptionMedium: z.string().optional(),
|
|
})
|
|
|
|
export const extraPageSchema = z.object({
|
|
elevatorPitch: z.string(),
|
|
mainBody: z.string().optional(),
|
|
})
|
|
|
|
export const additionalDataSchema = z
|
|
.object({
|
|
attributes: z.object({
|
|
name: z.string(),
|
|
id: z.string(),
|
|
displayWebPage: z.object({
|
|
healthGym: z.boolean(),
|
|
meetingRoom: z.boolean(),
|
|
parking: z.boolean(),
|
|
specialNeeds: z.boolean(),
|
|
}),
|
|
specialNeedGroups: z.array(specialNeedGroupSchema),
|
|
gallery: gallerySchema.optional(),
|
|
conferencesAndMeetings: facilitySchema.optional(),
|
|
healthAndWellness: facilitySchema.optional(),
|
|
restaurantImages: facilitySchema.optional(),
|
|
restaurantsOverviewPage: restaurantsOverviewPageSchema,
|
|
meetingRooms: extraPageSchema,
|
|
healthAndFitness: extraPageSchema,
|
|
hotelParking: extraPageSchema,
|
|
hotelSpecialNeeds: extraPageSchema,
|
|
accessibilityElevatorPitchText: z.string().optional(),
|
|
hotelRoomElevatorPitchText: z.string().optional(),
|
|
}),
|
|
type: z.literal("additionalData"),
|
|
})
|
|
|
|
export function transformAdditionalData(
|
|
data: z.output<typeof additionalDataSchema>
|
|
) {
|
|
return {
|
|
...data.attributes,
|
|
id: data.attributes.id,
|
|
type: data.type
|
|
}
|
|
} |