This commit is contained in:
Your Name committed 2026-09-17 07:06:49 +07:00
1 parent 235cf6047d
commit 88feee666f
7 files changed
+1309 -2

No files matched your search

+72 -1
View File
@@ -802,6 +802,64 @@ export const CustomSectionPayloadSchema = z.object({
}).strict();
export type CustomSectionPayload = z.infer<typeof CustomSectionPayloadSchema>;
export const HeroMinimalSectionPayloadSchema = z.object({
imageUrl: z.string().min(1),
tagline: LocalizedStringSchema.optional(),
title: LocalizedStringSchema,
focalPoint: z.object({ x: z.string(), y: z.string() }).optional(),
contentAlignment: z.enum(['left', 'center', 'right']).optional().default('center'),
overlayOpacity: z.number().optional().default(20),
});
export type HeroMinimalSectionPayload = z.infer<typeof HeroMinimalSectionPayloadSchema>;
export const HeroSplitMinimalSectionPayloadSchema = z.object({
imageUrl: z.string().min(1),
title: LocalizedStringSchema,
subtitle: LocalizedStringSchema.optional(),
imagePosition: z.enum(['left', 'right']).optional().default('right'),
focalPoint: z.object({ x: z.string(), y: z.string() }).optional(),
backgroundColor: z.string().optional(),
});
export type HeroSplitMinimalSectionPayload = z.infer<typeof HeroSplitMinimalSectionPayloadSchema>;
export const HeroVideoMinimalSectionPayloadSchema = z.object({
videoUrl: z.string().min(1),
posterImageUrl: z.string().optional(),
tagline: LocalizedStringSchema.optional(),
title: LocalizedStringSchema.optional(),
overlayOpacity: z.number().optional().default(25),
height: z.enum(['full', 'large', 'medium']).optional().default('large'),
focalPoint: z.object({ x: z.string(), y: z.string() }).optional(),
});
export type HeroVideoMinimalSectionPayload = z.infer<typeof HeroVideoMinimalSectionPayloadSchema>;
export const BannerMinimalSectionPayloadSchema = z.object({
title: LocalizedStringSchema,
subtitle: LocalizedStringSchema.optional(),
imageUrl: z.string().optional(),
linkUrl: z.string().optional(),
backgroundColor: z.string().optional(),
textColor: z.string().optional(),
focalPoint: z.object({ x: z.string(), y: z.string() }).optional(),
});
export type BannerMinimalSectionPayload = z.infer<typeof BannerMinimalSectionPayloadSchema>;
export const AnnouncementBarMinimalSectionPayloadSchema = z.object({
slides: z.array(LocalizedStringSchema).min(1),
backgroundColor: z.string().optional(),
textColor: z.string().optional(),
speed: z.number().optional().default(4000),
});
export type AnnouncementBarMinimalSectionPayload = z.infer<typeof AnnouncementBarMinimalSectionPayloadSchema>;
export const UspMinimalSectionPayloadSchema = z.object({
items: z.array(LocalizedStringSchema).min(1),
separator: z.enum(['dot', 'slash', 'line']).optional().default('dot'),
backgroundColor: z.string().optional(),
textColor: z.string().optional(),
});
export type UspMinimalSectionPayload = z.infer<typeof UspMinimalSectionPayloadSchema>;
export const PAGE_SECTION_TYPES = [
'HERO', 'HERO_V2', 'HERO_VIDEO', 'ANNOUNCEMENT_BAR', 'NEWSLETTER', 'EDITORIAL_TILE', 'FEATURED_TILES',
'EDITORIAL_CAROUSEL', 'PRODUCTS', 'CATEGORIES', 'TEXT', 'BANNER',
@@ -810,7 +868,8 @@ export const PAGE_SECTION_TYPES = [
'ARTICLE_CTA', 'SCENT_NOTES_BREAKDOWN', 'QUOTE_CALLOUT',
'PRODUCT_CAROUSEL', 'ACCORDION', 'CONTACT_INFO', 'CONTACT_FORM',
'USP_BAR', 'PRODUCT_MAIN', 'PRODUCT_DETAILS', 'PRODUCT_SPECS',
'PRODUCT_REVIEWS', 'RELATED_PRODUCTS', 'CUSTOM'
'PRODUCT_REVIEWS', 'RELATED_PRODUCTS', 'CUSTOM',
'HERO_MINIMAL', 'HERO_SPLIT_MINIMAL', 'HERO_VIDEO_MINIMAL', 'BANNER_MINIMAL', 'ANNOUNCEMENT_BAR_MINIMAL', 'USP_MINIMAL'
] as const;
export type SectionType = typeof PAGE_SECTION_TYPES[number];
@@ -851,6 +910,12 @@ export const PAGE_SECTION_LOCALIZED_PATHS: Record<SectionType, readonly string[]
PRODUCT_REVIEWS: ['title', 'subtitle'],
RELATED_PRODUCTS: ['title', 'subtitle'],
CUSTOM: [],
HERO_MINIMAL: ['tagline', 'title'],
HERO_SPLIT_MINIMAL: ['title', 'subtitle'],
HERO_VIDEO_MINIMAL: ['tagline', 'title'],
BANNER_MINIMAL: ['title', 'subtitle'],
ANNOUNCEMENT_BAR_MINIMAL: ['slides[]'],
USP_MINIMAL: ['items[]'],
};
export const PAGE_SECTION_PAYLOAD_SCHEMAS: Record<SectionType, z.ZodType> = {
@@ -890,6 +955,12 @@ export const PAGE_SECTION_PAYLOAD_SCHEMAS: Record<SectionType, z.ZodType> = {
PRODUCT_REVIEWS: ProductLayoutSectionPayloadSchema,
RELATED_PRODUCTS: ProductLayoutSectionPayloadSchema,
CUSTOM: CustomSectionPayloadSchema,
HERO_MINIMAL: HeroMinimalSectionPayloadSchema,
HERO_SPLIT_MINIMAL: HeroSplitMinimalSectionPayloadSchema,
HERO_VIDEO_MINIMAL: HeroVideoMinimalSectionPayloadSchema,
BANNER_MINIMAL: BannerMinimalSectionPayloadSchema,
ANNOUNCEMENT_BAR_MINIMAL: AnnouncementBarMinimalSectionPayloadSchema,
USP_MINIMAL: UspMinimalSectionPayloadSchema,
};
export const PRODUCT_DETAIL_SECTION_TYPES = [