import slugify from "slugify" import { z } from "zod" import { FacilityEnum } from "@scandic-hotels/common/constants/facilities" import { nullableArrayObjectValidator } from "@scandic-hotels/common/utils/zod/arrayValidator" import { nullableStringValidator } from "@scandic-hotels/common/utils/zod/stringValidator" const rawDetailedFacilitySchema = z.object({ filter: nullableStringValidator, icon: nullableStringValidator, id: z.nativeEnum(FacilityEnum), name: nullableStringValidator, public: z.boolean(), sortOrder: z.number(), }) function transformDetailedFacility( data: z.output ) { return { ...data, slug: slugify(data.name, { lower: true, strict: true }), } } export const detailedFacilitySchema = rawDetailedFacilitySchema.transform( transformDetailedFacility ) export const detailedFacilitiesSchema = nullableArrayObjectValidator( rawDetailedFacilitySchema ).transform((facilities) => { const uniqueFacilities = new Map() facilities.forEach((facility) => { if (!uniqueFacilities.has(facility.id)) { uniqueFacilities.set(facility.id, facility) } }) return Array.from(uniqueFacilities.values()) .sort((a, b) => b.sortOrder - a.sortOrder) .map(transformDetailedFacility) })