This commit is contained in:
Your Name committed 2026-06-27 23:19:50 -04:00
1 parent fb776f778f
commit 8f64d89f6f
13 files changed
+779 -295

No files matched your search

+46 -30
View File
@@ -271,6 +271,7 @@ export const ProductsSectionPayloadSchema = z.object({
title: LocalizedStringSchema,
subtitle: LocalizedStringSchema.optional(),
type: z.enum(['featured', 'brand', 'custom']),
categoryId: z.number().optional(),
brandId: z.number().optional(),
productIds: z.array(z.number()).optional(),
limit: z.number().optional(),
@@ -354,46 +355,59 @@ export interface CustomerAddress {
}
export const HeroArticlePayloadSchema = z.object({
title: z.string().min(1, "Title is required"),
subtitle: z.string().optional(),
author: z.string().optional(),
publishDate: z.string().optional(), // Or z.date() if preferred, but string works for ISO dates
backgroundImageUrl: z.string().url("Must be a valid URL").optional(),
export const HeroArticleSectionPayloadSchema = z.object({
title: LocalizedStringSchema,
subtitle: LocalizedStringSchema.optional(),
author: LocalizedStringSchema.optional(),
category: LocalizedStringSchema.optional(),
publishDate: z.string().optional(),
date: z.string().optional(),
imageUrl: z.string().optional(),
backgroundImageUrl: z.string().optional(),
overlayColor: z.string().optional(),
});
export type HeroArticlePayload = z.infer<typeof HeroArticlePayloadSchema>;
export type HeroArticleSectionPayload = z.infer<typeof HeroArticleSectionPayloadSchema>;
export const RichTextPayloadSchema = z.object({
content: z.string().min(1, "Content is required"),
export const RichTextSectionPayloadSchema = z.object({
title: LocalizedStringSchema.optional(),
content: LocalizedStringSchema,
});
export type RichTextPayload = z.infer<typeof RichTextPayloadSchema>;
export type RichTextSectionPayload = z.infer<typeof RichTextSectionPayloadSchema>;
export const ScentNotesBreakdownPayloadSchema = z.object({
export const ScentNotesBreakdownSectionPayloadSchema = z.object({
title: LocalizedStringSchema.optional(),
description: LocalizedStringSchema.optional(),
topNotes: z.array(LocalizedStringSchema),
middleNotes: z.array(LocalizedStringSchema),
baseNotes: z.array(LocalizedStringSchema),
topNotes: z.union([LocalizedStringSchema, z.array(LocalizedStringSchema)]).optional(),
heartNotes: z.union([LocalizedStringSchema, z.array(LocalizedStringSchema)]).optional(),
middleNotes: z.union([LocalizedStringSchema, z.array(LocalizedStringSchema)]).optional(),
baseNotes: z.union([LocalizedStringSchema, z.array(LocalizedStringSchema)]).optional(),
});
export type ScentNotesBreakdownPayload = z.infer<typeof ScentNotesBreakdownPayloadSchema>;
export type ScentNotesBreakdownSectionPayload = z.infer<typeof ScentNotesBreakdownSectionPayloadSchema>;
export const QuoteCalloutPayloadSchema = z.object({
quote: z.string().min(1, "Quote is required"),
author: z.string().optional(),
export const QuoteCalloutSectionPayloadSchema = z.object({
quote: LocalizedStringSchema,
author: LocalizedStringSchema.optional(),
role: LocalizedStringSchema.optional(),
});
export type QuoteCalloutPayload = z.infer<typeof QuoteCalloutPayloadSchema>;
export type QuoteCalloutSectionPayload = z.infer<typeof QuoteCalloutSectionPayloadSchema>;
export const ProductCarouselPayloadSchema = z.object({
export const ProductCarouselSectionPayloadSchema = z.object({
title: LocalizedStringSchema.optional(),
description: LocalizedStringSchema.optional(),
collectionId: z.string().optional(),
limit: z.number().int().positive().optional(),
limit: z.number().positive().optional(),
showPrice: z.boolean().optional(),
showAddToCart: z.boolean().optional(),
products: z.array(z.any()).optional(),
});
export type ProductCarouselPayload = z.infer<typeof ProductCarouselPayloadSchema>;
export type ProductCarouselSectionPayload = z.infer<typeof ProductCarouselSectionPayloadSchema>;
// Aliases for backwards compatibility in ScentGuideSectionSchema
export const HeroArticlePayloadSchema = HeroArticleSectionPayloadSchema;
export const RichTextPayloadSchema = RichTextSectionPayloadSchema;
export const ScentNotesBreakdownPayloadSchema = ScentNotesBreakdownSectionPayloadSchema;
export const QuoteCalloutPayloadSchema = QuoteCalloutSectionPayloadSchema;
export const ProductCarouselPayloadSchema = ProductCarouselSectionPayloadSchema;
export const ScentGuideSectionSchema = z.discriminatedUnion("type", [
z.object({
@@ -442,6 +456,7 @@ export const ScentGuidePageSchema = z.object({
export type ScentGuidePage = z.infer<typeof ScentGuidePageSchema>;
export const AccordionSectionPayloadSchema = z.object({
title: LocalizedStringSchema.optional(),
categories: z.array(
z.object({
name: LocalizedStringSchema,
@@ -451,23 +466,24 @@ export const AccordionSectionPayloadSchema = z.object({
q: LocalizedStringSchema,
a: LocalizedStringSchema,
})
),
).min(1),
})
),
).min(1),
});
export type AccordionSectionPayload = z.infer<typeof AccordionSectionPayloadSchema>;
export const ContactInfoSectionPayloadSchema = z.object({
address: z.string().min(1, "Address is required"),
email: z.string().min(1, "Email is required"),
line: z.string().min(1, "Line ID is required"),
hours: z.string().min(1, "Business hours are required"),
title: LocalizedStringSchema.optional(),
address: LocalizedStringSchema,
email: LocalizedStringSchema,
line: LocalizedStringSchema,
hours: LocalizedStringSchema,
});
export type ContactInfoSectionPayload = z.infer<typeof ContactInfoSectionPayloadSchema>;
export const ContactFormSectionPayloadSchema = z.object({
title: z.string().optional(),
subtitle: z.string().optional(),
title: LocalizedStringSchema.optional(),
subtitle: LocalizedStringSchema.optional(),
});
export type ContactFormSectionPayload = z.infer<typeof ContactFormSectionPayloadSchema>;