import z from 'zod'; import { ICoverSlideDataStructure, IThankYouSlideDataStructure, ITextSlideDataStructure, IStructuredListSlideDataStructure, IContentsSlideDataStructure, IImageSlideDataStructure, ISectionBreakSlideDataStructure, ITableSlideDataStructure, SLIDE_CHART_TYPE, IBarChartSlideDataStructure, IChartSlideDataStructure, IconSlotSchema, ImageSlotSchema, ITimelineSlideDataStructure, } from './slide-content.schema'; import { SLIDE_CONTENT_TYPE } from '../../constants'; export const CoverSlideDataUserEditSchema = z.object({ contentType: z.literal(SLIDE_CONTENT_TYPE.COVER), title: z.string().max(1000), author: z .object({ label: z.string().max(200), value: z.string().max(500), }) .optional(), date: z .object({ label: z.string().max(200), value: z.string().max(500), }) .optional(), email: z .object({ label: z.string().max(200), value: z.string().max(500), }) .optional(), version: z.literal(1), }) satisfies z.ZodType; export const ThankYouSlideDataUserEditSchema = z.object({ contentType: z.literal(SLIDE_CONTENT_TYPE.THANK_YOU), title: z.string().max(1000), author: z .object({ label: z.string().max(200), value: z.string().max(500), }) .optional(), date: z .object({ label: z.string().max(200), value: z.string().max(500), }) .optional(), email: z .object({ label: z.string().max(200), value: z.string().max(500), }) .optional(), version: z.literal(1), }) satisfies z.ZodType; export const TextSlideDataUserEditSchema = z.object({ contentType: z.literal(SLIDE_CONTENT_TYPE.TEXT), title: z.string().max(1000), description: z.string().max(5000), version: z.literal(1), }) satisfies z.ZodType; export const StructuredListSlideDataUserEditSchema = z.object({ contentType: z.literal(SLIDE_CONTENT_TYPE.STRUCTURED_LIST), title: z.string().max(1000), description: z.string().max(2000), list: z .array( z.object({ title: z.string().max(500), description: z.string().max(1000), iconSlot: IconSlotSchema, }), ) .max(15), version: z.literal(1), }) satisfies z.ZodType; export const ContentsSlideDataUserEditSchema = z.object({ contentType: z.literal(SLIDE_CONTENT_TYPE.CONTENTS), title: z.string().max(1000), items: z .array( z.object({ pageNumber: z.number(), title: z.string().max(1000), }), ) .max(100), imageSlot: ImageSlotSchema, version: z.literal(1), }) satisfies z.ZodType; export const ImageSlideDataUserEditSchema = z.object({ contentType: z.literal(SLIDE_CONTENT_TYPE.TEXT_WITH_IMAGE), title: z.string().max(1000), description: z.string().max(4000), imageSlot: ImageSlotSchema, version: z.literal(1), }) satisfies z.ZodType; export const SectionBreakSlideDataUserEditSchema = z.object({ contentType: z.literal(SLIDE_CONTENT_TYPE.SECTION_BREAK), title: z.string().max(1000), description: z.string().max(1000), version: z.literal(1), }) satisfies z.ZodType; export const TableSlideDataUserEditSchema = z.object({ contentType: z.literal(SLIDE_CONTENT_TYPE.TABLE), title: z.string().max(1000), description: z.string().max(2000), table: z.object({ columnHeaders: z.array(z.string().max(500)).max(30), rows: z.array(z.array(z.string().max(1000))).max(50), hasRowHeaders: z.boolean(), hasSummaryRow: z.boolean(), }), version: z.literal(1), }) satisfies z.ZodType; export const BarChartSlideDataUserEditSchema = z.object({ type: z.literal(SLIDE_CHART_TYPE.BAR), categories: z.array(z.string().max(500)).max(100), series: z .array( z.object({ name: z.string().max(500), data: z.array(z.number()), type: z.number().min(0).max(11), }), ) .max(10), yAxisLabel: z.string().max(500).optional(), unit: z.string().max(100).optional(), version: z.literal(1), }) satisfies z.ZodType; export const ChartSlideDataUserEditSchema = z.object({ contentType: z.literal(SLIDE_CONTENT_TYPE.CHART), title: z.string().max(1000), description: z.string().max(4000), chart: z.discriminatedUnion('type', [BarChartSlideDataUserEditSchema]), version: z.literal(1), }) satisfies z.ZodType; export const TimelineSlideDataUserEditSchema = z.object({ contentType: z.literal(SLIDE_CONTENT_TYPE.TIMELINE), title: z.string().min(1).max(500), description: z.string().min(1).max(1000), timeline: z.object({ events: z .array( z.object({ date: z.string().min(1).max(100), title: z.string().min(1).max(200), description: z.string().min(1).max(500), }), ) .min(2) .max(10), }), version: z.literal(1), }) satisfies z.ZodType; export const SlideContentUserEditSchema = z.discriminatedUnion('contentType', [ CoverSlideDataUserEditSchema, StructuredListSlideDataUserEditSchema, TextSlideDataUserEditSchema, ContentsSlideDataUserEditSchema, SectionBreakSlideDataUserEditSchema, ImageSlideDataUserEditSchema, ThankYouSlideDataUserEditSchema, TableSlideDataUserEditSchema, ChartSlideDataUserEditSchema, TimelineSlideDataUserEditSchema, ]); export type SlideContentUserEdit = z.infer;