x
This commit is contained in:
1 parent
e509e3f0a2
commit
0d4df55d93
7 files changed
+526
-3
No files matched your search
+61
-1
@@ -464,6 +464,60 @@ export const ArticleMediaSectionPayloadSchema = z.object({
|
||||
});
|
||||
export type ArticleMediaSectionPayload = z.infer<typeof ArticleMediaSectionPayloadSchema>;
|
||||
|
||||
export const ArticleHeaderSectionPayloadSchema = z.object({
|
||||
title: LocalizedStringSchema,
|
||||
subtitle: LocalizedStringSchema.optional(),
|
||||
category: LocalizedStringSchema.optional(),
|
||||
author: LocalizedStringSchema.optional(),
|
||||
publishDate: z.string().optional(),
|
||||
imageUrl: z.string().min(1).optional(),
|
||||
imageAlt: LocalizedStringSchema.optional(),
|
||||
}).strict().superRefine((payload, ctx) => {
|
||||
if (payload.imageUrl && !payload.imageAlt) {
|
||||
ctx.addIssue({ code: 'custom', path: ['imageAlt'], message: 'imageAlt is required when imageUrl is provided' });
|
||||
}
|
||||
});
|
||||
export type ArticleHeaderSectionPayload = z.infer<typeof ArticleHeaderSectionPayloadSchema>;
|
||||
|
||||
export const ArticleGallerySectionPayloadSchema = z.object({
|
||||
title: LocalizedStringSchema.optional(),
|
||||
layout: z.enum(['grid', 'featured']).optional().default('grid'),
|
||||
images: z.array(z.object({
|
||||
imageUrl: z.string().min(1),
|
||||
alt: LocalizedStringSchema,
|
||||
caption: LocalizedStringSchema.optional(),
|
||||
}).strict()).min(2).max(8),
|
||||
}).strict();
|
||||
export type ArticleGallerySectionPayload = z.infer<typeof ArticleGallerySectionPayloadSchema>;
|
||||
|
||||
export const ArticleFactsSectionPayloadSchema = z.object({
|
||||
title: LocalizedStringSchema.optional(),
|
||||
items: z.array(z.object({
|
||||
title: LocalizedStringSchema,
|
||||
description: LocalizedStringSchema.optional(),
|
||||
}).strict()).min(1).max(8),
|
||||
}).strict();
|
||||
export type ArticleFactsSectionPayload = z.infer<typeof ArticleFactsSectionPayloadSchema>;
|
||||
|
||||
export const ArticleVideoSectionPayloadSchema = z.object({
|
||||
title: LocalizedStringSchema.optional(),
|
||||
videoUrl: z.string().url().startsWith('https://'),
|
||||
caption: LocalizedStringSchema.optional(),
|
||||
posterUrl: z.string().min(1).optional(),
|
||||
aspectRatio: z.enum(['16:9', '4:3', '1:1']).optional().default('16:9'),
|
||||
}).strict();
|
||||
export type ArticleVideoSectionPayload = z.infer<typeof ArticleVideoSectionPayloadSchema>;
|
||||
|
||||
export const ArticleReferencesSectionPayloadSchema = z.object({
|
||||
title: LocalizedStringSchema.optional(),
|
||||
items: z.array(z.object({
|
||||
title: LocalizedStringSchema,
|
||||
url: z.string().url().startsWith('https://').optional(),
|
||||
note: LocalizedStringSchema.optional(),
|
||||
}).strict()).min(1).max(20),
|
||||
}).strict();
|
||||
export type ArticleReferencesSectionPayload = z.infer<typeof ArticleReferencesSectionPayloadSchema>;
|
||||
|
||||
export const ScentNotesBreakdownSectionPayloadSchema = z.object({
|
||||
title: LocalizedStringSchema.optional(),
|
||||
description: LocalizedStringSchema.optional(),
|
||||
@@ -642,7 +696,8 @@ export type CustomSectionPayload = z.infer<typeof CustomSectionPayloadSchema>;
|
||||
export const PAGE_SECTION_TYPES = [
|
||||
'HERO', 'ANNOUNCEMENT_BAR', 'NEWSLETTER', 'EDITORIAL_TILE',
|
||||
'EDITORIAL_CAROUSEL', 'PRODUCTS', 'CATEGORIES', 'TEXT', 'BANNER',
|
||||
'HERO_ARTICLE', 'RICH_TEXT', 'ARTICLE_MEDIA', 'SCENT_NOTES_BREAKDOWN', 'QUOTE_CALLOUT',
|
||||
'HERO_ARTICLE', 'RICH_TEXT', 'ARTICLE_HEADER', 'ARTICLE_MEDIA', 'ARTICLE_GALLERY',
|
||||
'ARTICLE_FACTS', 'ARTICLE_VIDEO', 'ARTICLE_REFERENCES', 'SCENT_NOTES_BREAKDOWN', 'QUOTE_CALLOUT',
|
||||
'PRODUCT_CAROUSEL', 'ACCORDION', 'CONTACT_INFO', 'CONTACT_FORM',
|
||||
'HERO_V2', 'USP_BAR', 'PRODUCT_MAIN', 'PRODUCT_DETAILS', 'PRODUCT_SPECS',
|
||||
'PRODUCT_REVIEWS', 'RELATED_PRODUCTS', 'CUSTOM'
|
||||
@@ -661,7 +716,12 @@ export const PAGE_SECTION_PAYLOAD_SCHEMAS: Record<SectionType, z.ZodType> = {
|
||||
BANNER: BannerSectionPayloadSchema,
|
||||
HERO_ARTICLE: HeroArticleSectionPayloadSchema,
|
||||
RICH_TEXT: RichTextSectionPayloadSchema,
|
||||
ARTICLE_HEADER: ArticleHeaderSectionPayloadSchema,
|
||||
ARTICLE_MEDIA: ArticleMediaSectionPayloadSchema,
|
||||
ARTICLE_GALLERY: ArticleGallerySectionPayloadSchema,
|
||||
ARTICLE_FACTS: ArticleFactsSectionPayloadSchema,
|
||||
ARTICLE_VIDEO: ArticleVideoSectionPayloadSchema,
|
||||
ARTICLE_REFERENCES: ArticleReferencesSectionPayloadSchema,
|
||||
SCENT_NOTES_BREAKDOWN: ScentNotesBreakdownSectionPayloadSchema,
|
||||
QUOTE_CALLOUT: QuoteCalloutSectionPayloadSchema,
|
||||
PRODUCT_CAROUSEL: ProductCarouselSectionPayloadSchema,
|
||||
|
||||
Reference in new issue
Block a user