All files / features/events/schemas event-settings.schema.ts

100% Statements 1/1
100% Branches 0/0
100% Functions 0/0
100% Lines 1/1

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87    1x                                                                                                                                                                        
import { z } from 'zod'
 
export const eventSettingsSchema = z.object({
    // General
    name: z.string().min(1),
    goalAmount: z.coerce.number().min(1),
    slug: z.string().min(1),
    status: z.enum(['active', 'draft', 'closed']),
    date: z.string().optional(),
    description: z.string().optional(),
    formConfig: z.object({
        phone: z.object({
            enabled: z.boolean(),
            required: z.boolean().default(false),
        }),
        address: z.object({
            enabled: z.boolean(),
            required: z.boolean().default(false),
        }),
        company: z.object({
            enabled: z.boolean(),
            required: z.boolean().default(false),
        }),
        message: z.object({
            enabled: z.boolean(),
            required: z.boolean().default(false),
        }),
        anonymous: z.object({
            enabled: z.boolean(),
            required: z.boolean().default(false),
        }),
    }),
    live: z
        .object({
            theme: z.enum(['classic', 'modern', 'elegant']).default('classic'),
        })
        .optional(),
    // Branding Overrides
    useGlobalBranding: z.boolean(),
    organization: z.string().optional(),
    assets: z
        .object({
            logo: z.string().optional().or(z.literal('')).or(z.null()),
            backgroundLanding: z.string().optional().or(z.literal('')).or(z.null()),
            backgroundLive: z.string().optional().or(z.literal('')).or(z.null()),
        })
        .optional(),
    landing: z
        .object({
            impact: z.object({
                url: z.string().optional().or(z.literal('')).or(z.null()),
                enabled: z.boolean().default(true),
            }),
            community: z.object({
                url: z.string().optional().or(z.literal('')).or(z.null()),
                enabled: z.boolean().default(true),
            }),
            interactive: z.object({
                url: z.string().optional().or(z.literal('')).or(z.null()),
                enabled: z.boolean().default(true),
            }),
        })
        .optional(),
    themeVariables: z
        .array(
            z.object({
                key: z.string(),
                value: z.string(),
            }),
        )
        .optional(),
    communication: z
        .object({
            enabled: z.boolean().default(false),
            senderName: z.string().optional(),
            replyTo: z.string().email().optional().or(z.literal('')),
            subjectLine: z.string().optional(),
            supportEmail: z.string().email().optional().or(z.literal('')),
            phone: z.string().optional(),
            website: z.string().url().optional().or(z.literal('')),
            address: z.string().optional(),
        })
        .optional(),
})
 
export type EventSettingsFormValues = z.infer<typeof eventSettingsSchema>