fix: handle unpublished profiling consent * fix: handle unpublished profiling consent Approved-by: Emma Zettervall Approved-by: Chuma Mcphoy (We Ahead)
50 lines
1.1 KiB
TypeScript
50 lines
1.1 KiB
TypeScript
import { z } from "zod"
|
|
|
|
export const bannerSchema = z.object({
|
|
button_text: z.string(),
|
|
header: z.string(),
|
|
sub_header: z.string(),
|
|
})
|
|
|
|
export const modalSchema = z
|
|
.object({
|
|
header: z.string(),
|
|
sub_header: z.string(),
|
|
cards: z.object({
|
|
card: z.array(
|
|
z.object({
|
|
image_type: z.string(),
|
|
preamble: z.string(),
|
|
title: z.string(),
|
|
})
|
|
),
|
|
}),
|
|
})
|
|
.transform(({ header, sub_header, cards }) => ({
|
|
header,
|
|
sub_header,
|
|
cards: cards.card,
|
|
}))
|
|
|
|
export const profilingConsentSchema = z
|
|
.object({
|
|
all_profiling_consent: z.object({
|
|
items: z.array(
|
|
z.object({
|
|
main_icon: z.string(),
|
|
profiling_consent_banner: bannerSchema,
|
|
profiling_consent_modal: modalSchema,
|
|
})
|
|
),
|
|
}),
|
|
})
|
|
.transform((data) => {
|
|
const profiling_consent = data.all_profiling_consent.items[0]
|
|
if (!profiling_consent) return null
|
|
return {
|
|
icon: profiling_consent.main_icon,
|
|
banner: profiling_consent.profiling_consent_banner,
|
|
modal: profiling_consent.profiling_consent_modal,
|
|
}
|
|
})
|