Files
plunk/apps/web/src/lib/validation.ts
T

62 lines
1.5 KiB
TypeScript

/**
* Shared validation utilities for email-related forms
*/
export interface EmailFormValidation {
name?: string;
subject?: string;
body?: string;
from?: string;
segmentId?: string;
}
export class EmailFormValidator {
/**
* Validate email form fields (campaigns, templates)
*/
static validate(fields: EmailFormValidation, options: {requireSegment?: boolean} = {}): string | null {
if (fields.name !== undefined && !fields.name.trim()) {
return 'Name is required';
}
if (fields.subject !== undefined && !fields.subject.trim()) {
return 'Email subject is required';
}
if (fields.body !== undefined && !fields.body.trim()) {
return 'Email body is required';
}
if (fields.from !== undefined && !fields.from.trim()) {
return 'From address is required';
}
if (options.requireSegment && fields.segmentId !== undefined && !fields.segmentId) {
return 'Please select a segment';
}
return null;
}
/**
* Validate campaign-specific fields
*/
static validateCampaign(fields: EmailFormValidation & {segmentId?: string}, audienceType: string): string | null {
const baseError = this.validate(fields);
if (baseError) return baseError;
if (audienceType === 'SEGMENT' && !fields.segmentId) {
return 'Please select a segment';
}
return null;
}
/**
* Validate template-specific fields
*/
static validateTemplate(fields: EmailFormValidation): string | null {
return this.validate(fields);
}
}