@nestledjs/forms
Version:
A flexible React form library supporting both declarative and imperative usage patterns with TypeScript support
92 lines (91 loc) • 3.61 kB
TypeScript
import { ZodTypeAny } from 'zod';
import { FieldValues, RegisterOptions, Resolver } from 'react-hook-form';
import { BaseFieldOptions, InputFieldOptions } from '../form-types';
/**
* Creates validation rules for a field that combine Zod schema validation
* with traditional validation functions.
*
* @param field - The field configuration containing validation options
* @param isRequired - Whether the field is currently required (considering dynamic conditions)
* @returns RegisterOptions for react-hook-form register function
*/
export declare function createFieldValidation(field: InputFieldOptions, // InputFieldOptions extends BaseFieldOptions and has validate
isRequired: boolean, currentValidationGroup?: string): RegisterOptions;
/**
* Creates a form-level resolver that can handle both Zod schemas and field-level validation.
* This allows for mixed validation strategies within the same form.
*
* @param schema - Optional Zod schema for form-level validation
* @param fields - Array of form fields with their validation configurations
* @returns A resolver function for react-hook-form
*/
export declare function createFormResolver<TFieldValues extends FieldValues = FieldValues>(schema?: ZodTypeAny, fields?: Array<{
key: string;
options: InputFieldOptions;
}>, currentValidationGroup?: string): Resolver<TFieldValues> | undefined;
/**
* Creates a validation function that only validates fields in a specific group.
* Useful for multi-step forms where you want to validate only the current step.
*
* @param form - The react-hook-form instance
* @param validationGroup - The group to validate
* @param fields - Array of form fields
* @returns Promise that resolves to true if valid, or validation errors
*/
export declare function validateGroup<T extends FieldValues>(form: {
getValues: () => T;
trigger: (names?: string[]) => Promise<boolean>;
}, validationGroup: string, fields: Array<{
key: string;
options: BaseFieldOptions & {
validationGroup?: string;
};
}>): Promise<boolean>;
/**
* Gets all validation groups present in the form fields.
*
* @param fields - Array of form fields
* @returns Array of unique validation group names
*/
export declare function getValidationGroups(fields: Array<{
key: string;
options: BaseFieldOptions & {
validationGroup?: string;
};
}>): string[];
/**
* Gets all fields that belong to a specific validation group.
*
* @param fields - Array of form fields
* @param validationGroup - The group to filter by
* @returns Array of fields in the specified group
*/
export declare function getFieldsInGroup(fields: Array<{
key: string;
options: BaseFieldOptions & {
validationGroup?: string;
};
}>, validationGroup: string): Array<{
key: string;
options: BaseFieldOptions & {
validationGroup?: string;
};
}>;
/**
* Checks if a field should be validated based on current form values and validation conditions.
*
* @param field - The field to check
* @param formValues - Current form values
* @param currentValidationGroup - Current validation group (if any)
* @returns true if field should be validated, false otherwise
*/
export declare function shouldValidateField(field: {
options: BaseFieldOptions & {
validateWhen?: (formValues: any) => boolean;
validationGroup?: string;
};
}, formValues: any, currentValidationGroup?: string): boolean;
/**
* Utility to extract TypeScript types from Zod schemas for better type inference
*/
export type InferSchemaType<T> = T extends ZodTypeAny ? T['_output'] : never;