feat(LOY-365): Add support for eligible levels for promo campaign pages * feat(LOY-365): Add support for eligible levels for promo campaign pages * fix(LOY-365): update to most recent copy * fix(LOY-365): cleanup css * fix(LOY-365): Move ineligible message to the bottom * fix(LOY-365): remove uneeded type Approved-by: Erik Tiekstra Approved-by: Matilda Landström
78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import { transformedImageVaultAssetSchema } from "@scandic-hotels/common/utils/imageVault"
|
|
import { isMembershipLevel } from "@scandic-hotels/common/utils/membershipLevels"
|
|
import { nullableStringValidator } from "@scandic-hotels/common/utils/zod/stringValidator"
|
|
|
|
import { systemSchema } from "../schemas/system"
|
|
|
|
export const CAMPAIGN_TYPES = {
|
|
TIER: "TIER",
|
|
POINT: "POINT",
|
|
} as const
|
|
|
|
export const promoHeroSchema = z.object({
|
|
image: transformedImageVaultAssetSchema,
|
|
heading: z.string(),
|
|
benefits: z
|
|
.array(z.string())
|
|
.nullish()
|
|
.transform((data) => data || []),
|
|
})
|
|
|
|
export const promoCampaignPageSchema = z
|
|
.object({
|
|
promo_campaign_page: z.object({
|
|
title: z.string(),
|
|
heading: z.string(),
|
|
subheading: z.string().nullish(),
|
|
promo_hero: promoHeroSchema,
|
|
page_settings: z
|
|
.object({
|
|
booking_code: z.string().nullish(),
|
|
})
|
|
.nullish(),
|
|
campaign_type: z.nativeEnum(CAMPAIGN_TYPES),
|
|
promo_code: z.string(),
|
|
startdate: nullableStringValidator,
|
|
enddate: nullableStringValidator,
|
|
level_selection: z
|
|
.array(z.string())
|
|
.nullish()
|
|
.transform((data) => {
|
|
if (!data) return []
|
|
return data.filter(isMembershipLevel)
|
|
}),
|
|
system: systemSchema.merge(
|
|
z.object({
|
|
created_at: z.string(),
|
|
updated_at: z.string(),
|
|
})
|
|
),
|
|
}),
|
|
trackingProps: z.object({
|
|
url: z.string(),
|
|
}),
|
|
})
|
|
.transform(({ promo_campaign_page, ...data }) => {
|
|
const { page_settings, level_selection, ...promoCampaignPageData } =
|
|
promo_campaign_page
|
|
const bookingCode = page_settings?.booking_code || null
|
|
|
|
return {
|
|
...data,
|
|
promo_campaign_page: {
|
|
bookingCode,
|
|
eligibleLevels: level_selection,
|
|
...promoCampaignPageData,
|
|
},
|
|
}
|
|
})
|
|
|
|
/** REFS */
|
|
export const promoCampaignPageRefsSchema = z.object({
|
|
promo_campaign_page: z.object({
|
|
system: systemSchema,
|
|
}),
|
|
})
|