Feat/LOY-361 add promo campaign page type * feat(LOY-361): add Pomo Campaign page type * chore(SW-361): remove campaign page flag * fix(LOY-361): cleanup * fix(LOY-361): add promo code Approved-by: Erik Tiekstra Approved-by: Chuma Mcphoy (We Ahead)
57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
import { z } from "zod"
|
|
|
|
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 promoCampaignPageSchema = z
|
|
.object({
|
|
promo_campaign_page: z.object({
|
|
title: z.string(),
|
|
heading: z.string(),
|
|
subheading: z.string().nullish(),
|
|
page_settings: z
|
|
.object({
|
|
booking_code: z.string().nullish(),
|
|
})
|
|
.nullish(),
|
|
campaign_type: z.nativeEnum(CAMPAIGN_TYPES),
|
|
promo_code: z.string(),
|
|
startdate: nullableStringValidator,
|
|
enddate: nullableStringValidator,
|
|
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, ...promoCampaignPageData } = promo_campaign_page
|
|
const bookingCode = page_settings?.booking_code || null
|
|
|
|
return {
|
|
...data,
|
|
promo_campaign_page: {
|
|
bookingCode,
|
|
...promoCampaignPageData,
|
|
},
|
|
}
|
|
})
|
|
|
|
/** REFS */
|
|
export const promoCampaignPageRefsSchema = z.object({
|
|
promo_campaign_page: z.object({
|
|
system: systemSchema,
|
|
}),
|
|
})
|