UNPKG

@ordojs/forms

Version:

Comprehensive form handling system for OrdoJS

182 lines 5.92 kB
/** * Core types and interfaces for the forms system */ export type FieldValue = string | number | boolean | Date | File | null | undefined; export type FieldValues = Record<string, FieldValue>; export interface FieldError { type: string; message: string; field?: string; } export interface FieldState { value: FieldValue; error: FieldError | null; touched: boolean; dirty: boolean; valid: boolean; validating: boolean; focused: boolean; } export interface FormState { values: FieldValues; errors: Record<string, FieldError>; touched: Record<string, boolean>; dirty: Record<string, boolean>; valid: boolean; validating: boolean; submitting: boolean; submitted: boolean; submitCount: number; } export interface ValidationRule { type: string; message: string; validate: (value: FieldValue, formValues?: FieldValues) => boolean | Promise<boolean>; } export interface FieldConfig { name: string; defaultValue?: FieldValue; rules?: ValidationRule[]; asyncRules?: ValidationRule[]; debounceMs?: number; validateOnChange?: boolean; validateOnBlur?: boolean; transform?: (value: FieldValue) => FieldValue; format?: (value: FieldValue) => string; parse?: (value: string) => FieldValue; } export interface FormConfig { initialValues?: FieldValues; validateOnChange?: boolean; validateOnBlur?: boolean; validateOnSubmit?: boolean; resetOnSubmit?: boolean; enableReinitialize?: boolean; onSubmit?: (values: FieldValues, form: FormInstance) => void | Promise<void>; onValidationError?: (errors: Record<string, FieldError>, form: FormInstance) => void; onReset?: (form: FormInstance) => void; } export interface FormInstance { getState(): FormState; getFieldState(name: string): FieldState | undefined; getValues(): FieldValues; getValue(name: string): FieldValue; getErrors(): Record<string, FieldError>; getError(name: string): FieldError | null; setValue(name: string, value: FieldValue, shouldValidate?: boolean): void; setValues(values: FieldValues, shouldValidate?: boolean): void; setError(name: string, error: FieldError): void; setErrors(errors: Record<string, FieldError>): void; clearError(name: string): void; clearErrors(): void; registerField(config: FieldConfig): () => void; unregisterField(name: string): void; touchField(name: string): void; untouchField(name: string): void; focusField(name: string): void; blurField(name: string): void; validateField(name: string): Promise<boolean>; validateForm(): Promise<boolean>; isValid(): boolean; isValidating(): boolean; submit(): Promise<void>; reset(values?: FieldValues): void; resetField(name: string, value?: FieldValue): void; isDirty(): boolean; isTouched(): boolean; isSubmitting(): boolean; hasBeenSubmitted(): boolean; getSubmitCount(): number; handleSubmit(event?: Event): Promise<void>; handleReset(event?: Event): void; handleFieldChange(name: string, value: FieldValue): void; handleFieldBlur(name: string): void; handleFieldFocus(name: string): void; subscribe(callback: (state: FormState) => void): () => void; subscribeToField(name: string, callback: (state: FieldState) => void): () => void; } export interface BaseValidationSchema { validate(values: FieldValues): Promise<Record<string, FieldError>>; validateField(name: string, value: FieldValue, values?: FieldValues): Promise<FieldError | null>; } export interface FormArrayInstance { fields: Array<{ id: string; name: string; }>; append(value: FieldValue): void; prepend(value: FieldValue): void; insert(index: number, value: FieldValue): void; remove(index: number): void; move(from: number, to: number): void; swap(indexA: number, indexB: number): void; replace(index: number, value: FieldValue): void; clear(): void; length: number; } export interface FieldArrayConfig { name: string; defaultValue?: FieldValue[]; minLength?: number; maxLength?: number; keyName?: string; } export interface ZodSchema { parse: (data: any) => any; safeParse: (data: any) => { success: boolean; data?: any; error?: any; }; } export interface YupSchema { validate: (data: any) => Promise<any>; validateSync: (data: any) => any; isValid: (data: any) => Promise<boolean>; } export interface JoiSchema { validate: (data: any) => { error?: any; value?: any; }; validateAsync: (data: any) => Promise<any>; } export type ValidationSchema = ZodSchema | YupSchema | JoiSchema; export interface AccessibilityConfig { describedBy?: string; labelledBy?: string; required?: boolean; invalid?: boolean; errorId?: string; helpTextId?: string; } export interface StepConfig { id: string; title: string; description?: string; fields: string[]; validationSchema?: ValidationSchema; onEnter?: (form: FormInstance) => void | Promise<void>; onExit?: (form: FormInstance) => void | Promise<void>; canProceed?: (form: FormInstance) => boolean; } export interface MultiStepFormConfig extends FormConfig { steps: StepConfig[]; currentStep?: number; onStepChange?: (step: number, form: FormInstance) => void; onComplete?: (values: FieldValues, form: FormInstance) => void | Promise<void>; } export interface MultiStepFormInstance extends FormInstance { currentStep: number; totalSteps: number; isFirstStep: boolean; isLastStep: boolean; nextStep(): void; prevStep(): void; goToStep(step: number): void; canGoNext(): boolean; canGoPrev(): boolean; getCurrentStepConfig(): StepConfig; getStepProgress(): number; } //# sourceMappingURL=types.d.ts.map