UNPKG

react-zod-form

Version:

Simple form validation and values transformation.

48 lines (47 loc) 2.61 kB
import { FormEvent } from "react"; import { z } from "zod"; import { Leaves, ShapeToFields, ZodFormEvents, ZodFormOptions } from "./types"; /** * A general view of a form. */ declare class ZodForm<Shape extends z.ZodRawShape, FormObject extends z.ZodObject<Shape>> { readonly shape: Shape; readonly options?: ZodFormOptions | undefined; private events; readonly object: FormObject; readonly fields: ShapeToFields<Shape>; readonly fieldNames: Exclude<Leaves<FormObject["_type"]>, null | undefined>[]; constructor(shape: Shape, options?: ZodFormOptions | undefined); /** * @throws `ZodError` * @returns Field name and value */ parseCurrentField<Key extends keyof Shape & string>(event: FormEvent<HTMLFormElement>): { name: string; value: any; } | undefined; parseField<Key extends keyof Shape & string>(event: FormEvent<HTMLFormElement>, fieldName: Key): { name: string; value: any; } | undefined; private emitError; /** * @throws `ZodError` * @returns Fields dictionary */ parseAllFields(event: FormEvent<HTMLFormElement>): (z.objectUtil.addQuestionMarks<z.baseObjectOutputType<Shape>, { [k_1 in keyof z.baseObjectOutputType<Shape>]: undefined extends z.baseObjectOutputType<Shape>[k_1] ? never : k_1; }[keyof Shape]> extends infer T ? { [k in keyof T]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<Shape>, { [k_1 in keyof z.baseObjectOutputType<Shape>]: undefined extends z.baseObjectOutputType<Shape>[k_1] ? never : k_1; }[keyof Shape]>[k]; } : never) | undefined; safeParseAllFields(event: FormEvent<HTMLFormElement>): z.SafeParseReturnType<z.baseObjectInputType<Shape> extends infer T ? { [k in keyof T]: z.baseObjectInputType<Shape>[k]; } : never, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<Shape>, { [k_2 in keyof z.baseObjectOutputType<Shape>]: undefined extends z.baseObjectOutputType<Shape>[k_2] ? never : k_2; }[keyof Shape]> extends infer T_1 ? { [k_1 in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<Shape>, { [k_2 in keyof z.baseObjectOutputType<Shape>]: undefined extends z.baseObjectOutputType<Shape>[k_2] ? never : k_2; }[keyof Shape]>[k_1]; } : never>; private shapeToFields; private getShapeFlatKeys; /** * Subscribes to `event` with `listener`. * * @example * form.on("close", () => { }) * * @returns `unsubscribe` method */ on<T extends keyof ZodFormEvents>(event: T, listener: ZodFormEvents[T]): () => void; } export default ZodForm; export type ZodFormAny = ZodForm<any, any>;