UNPKG

vue-use-form

Version:

```bash # npm npm i vue-use-form

228 lines (214 loc) 12.4 kB
import { Ref } from 'vue'; declare type FieldPathValue<FieldValues, FiledName extends keyof FieldValues> = FieldValues[FiledName]; declare const $NestedValue: unique symbol; declare type NestedValue<TValue extends object = object> = { [$NestedValue]: never; } & TValue; declare type DefaultValues<TFieldValues> = UnpackNestedValue<DeepPartial<TFieldValues>>; declare type UnpackNestedValue<T> = T extends NestedValue<infer U> ? U : T extends Date | FileList | File | Blob ? T : T extends object ? { [K in keyof T]: UnpackNestedValue<T[K]>; } : T; declare type DeepPartial<T> = T extends Date | FileList | File | NestedValue ? T : { [K in keyof T]?: DeepPartial<T[K]>; }; declare type NonUndefined<T> = T extends undefined ? never : T; declare type IsAny<T> = 0 extends 1 & T ? true : false; declare type DeepMap<T, TValue> = IsAny<T> extends true ? any : T extends Date | FileList | File | NestedValue ? TValue : T extends object ? { [K in keyof T]: DeepMap<NonUndefined<T[K]>, TValue>; } : TValue; declare type Message = string; declare type ValidationValue = boolean | number | string | RegExp; declare type ValidationRule<TValidationValue extends ValidationValue = ValidationValue> = TValidationValue | ValidationValueMessage<TValidationValue>; interface ValidationValueMessage<TValidationValue extends ValidationValue = ValidationValue> { value: TValidationValue; message: Message; } declare type ValidateResult = Message | Message[] | boolean | undefined; declare type Validate<TFieldValue> = (value: TFieldValue) => ValidateResult | Promise<ValidateResult>; declare type RegisterOptions<TFieldValues extends FieldValues = FieldValues, TFieldName extends string = string> = Partial<{ required: Message | ValidationRule<boolean>; min: ValidationRule<number | string>; max: ValidationRule<number | string>; maxLength: ValidationRule<number>; minLength: ValidationRule<number>; pattern: ValidationRule<RegExp>; validate: Validate<FieldPathValue<TFieldValues, TFieldName>> | Record<string, Validate<FieldPathValue<TFieldValues, TFieldName>>>; valueAsNumber: boolean; valueAsDate: boolean; value: FieldPathValue<TFieldValues, TFieldName>; setValueAs: (value: any) => any; vModelBinding?: string; disabled?: boolean; shouldUnregister?: boolean; onChange?: (event: any) => void; onBlur?: (event: any) => void; }>; declare type FieldError = Partial<{ type: keyof RegisterOptions | string; message?: string; ref?: FieldElement; }>; declare type FieldErrors<TFieldValues> = Partial<Record<keyof TFieldValues, FieldError>>; declare type FieldValues = Record<string, any>; declare type FieldElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement; interface Field { inputValue: Ref; el: FieldElement; rule: RegisterOptions; isDirty: boolean; isUnregistered: boolean; } declare type Fields<FieldValues extends object, FieldKeys extends keyof FieldValues> = Record<FieldKeys, Field>; declare type ResolverResult<T> = FieldErrors<T>; declare type Resolver<FieldValues extends object> = (values: Record<keyof FieldValues, any>) => Promise<ResolverResult<FieldValues>>; declare type Mode = 'onSubmit' | 'onBlur' | 'onChange' | 'onTouched' | 'all'; declare type CriteriaMode = 'firstError' | 'all'; declare type FieldNamesMarkedBoolean<TFieldValues extends FieldValues> = DeepMap<DeepPartial<TFieldValues>, boolean>; interface UseFormProps<TFieldValues extends object> { mode: Mode; reValidateMode: Exclude<Mode, 'onTouched' | 'all'>; defaultValues: DefaultValues<TFieldValues>; resolver: Resolver<TFieldValues>; shouldFocusError: boolean; shouldUnregister: boolean; criteriaMode: CriteriaMode; delayError: number; } declare type KeepStateOptions = Partial<{ keepDirtyValues: boolean; keepErrors: boolean; keepDirty: boolean; keepValues: boolean; keepDefaultValues: boolean; keepIsSubmitted: boolean; keepIsValid: boolean; keepSubmitCount: boolean; }>; declare type SubmitHandler<TFieldValues extends FieldValues> = (data: UnpackNestedValue<TFieldValues>, event?: Event) => any | Promise<any>; declare type SubmitErrorHandler<TFieldValues extends FieldValues> = (errors: FieldErrors<TFieldValues>, event?: Event) => any | Promise<any>; declare type UseFormHandleSubmit<TFieldValues extends FieldValues> = (onValid: SubmitHandler<TFieldValues>, onInvalid?: SubmitErrorHandler<TFieldValues>) => (e?: Event) => Promise<void>; declare type UseFormClearErrors<FieldName> = (fieldName?: FieldName | FieldName[]) => void; declare type GetValuesReturn<FieldValues, FieldVal = FieldValues[keyof FieldValues]> = { [K in keyof FieldValues]: FieldVal; }; declare type UseFormGetValues<FieldValues, FieldKeys> = (fieldNames?: FieldKeys | FieldKeys[]) => GetValuesReturn<FieldValues>; interface GetFieldStateReturn { isDirty: boolean; isValid: boolean; error?: FieldError; } declare type UseFormGetFieldState<FieldKeys> = (fieldName: FieldKeys) => GetFieldStateReturn; declare type UseFormSetError<FieldName> = (name: FieldName, error: FieldError, config?: { shouldFocusError: boolean; }) => void; declare type UseFormSetValue<FieldValues, FieldName extends keyof FieldValues, Value = FieldValues[FieldName]> = (name: FieldName, value: Value, config?: { shouldValidate?: boolean; shouldDirty?: boolean; }) => Promise<void>; declare type UseFormTriggerValidate<FieldKeys> = (fieldNames?: FieldKeys | FieldKeys[]) => Promise<void>; declare type UseFormReset<TFieldValues extends FieldValues> = (values?: DefaultValues<TFieldValues> | UnpackNestedValue<TFieldValues> | 'all', keepStateOptions?: KeepStateOptions) => void; declare type UseFormUnregister<TFieldValues extends FieldValues> = (name?: keyof TFieldValues, options?: Omit<KeepStateOptions, 'keepIsSubmitted' | 'keepSubmitCount' | 'keepValues' | 'keepDefaultValues' | 'keepErrors' | 'keepIsValid' | 'keepDirtyValues'> & { keepValue?: boolean; keepError?: boolean; }) => void; interface UseFormRegister<T extends FieldValues> { (name: keyof T, options?: RegisterOptions): any; (name: string, options?: RegisterOptions): any; } declare type UseFormSetFocus<FieldValues> = (name: keyof FieldValues) => void; declare type UseFormIsExistInErrors<FieldValues> = (name: keyof FieldValues) => boolean; interface UseFormHandlers<TFieldValues, FieldName = keyof TFieldValues> { getValues: UseFormGetValues<TFieldValues, FieldName>; getFieldState: UseFormGetFieldState<FieldName>; setError: UseFormSetError<FieldName>; clearErrors: UseFormClearErrors<FieldName>; setValue: UseFormSetValue<TFieldValues, keyof TFieldValues>; triggerValidate: UseFormTriggerValidate<FieldName>; reset: UseFormReset<TFieldValues>; handleSubmit: UseFormHandleSubmit<TFieldValues>; unregister: UseFormUnregister<TFieldValues>; register: UseFormRegister<TFieldValues>; setFocus: UseFormSetFocus<TFieldValues>; isExistInErrors: UseFormIsExistInErrors<TFieldValues>; } declare type FieldArrayDefaultValues = Record<number, any>; declare type UseFormControl<TFieldValues extends FieldValues> = { _formState: FormState<TFieldValues>; _fieldArrayDefaultValues: FieldArrayDefaultValues; _fields: Fields<TFieldValues, keyof TFieldValues>; } & UseFormHandlers<TFieldValues>; interface FormState<TFieldValues> { isDirty: boolean; dirtyFields: FieldNamesMarkedBoolean<TFieldValues>; isSubmitted: boolean; isSubmitSuccessful: boolean; submitCount: number; isSubmitting: boolean; isValidating: boolean; isValid: boolean; defaultValues: Partial<DefaultValues<TFieldValues>>; errors: FieldErrors<TFieldValues>; } declare function useForm<TFieldValues extends FieldValues = FieldValues>(props?: Partial<UseFormProps<TFieldValues>>): { control: UseFormControl<TFieldValues>; formState: FormState<TFieldValues>; getValues: UseFormGetValues<TFieldValues, keyof TFieldValues>; getFieldState: UseFormGetFieldState<keyof TFieldValues>; setError: UseFormSetError<keyof TFieldValues>; clearErrors: UseFormClearErrors<keyof TFieldValues>; setValue: UseFormSetValue<TFieldValues, keyof TFieldValues, TFieldValues[keyof TFieldValues]>; triggerValidate: UseFormTriggerValidate<keyof TFieldValues>; reset: UseFormReset<TFieldValues>; handleSubmit: UseFormHandleSubmit<TFieldValues>; unregister: UseFormUnregister<TFieldValues>; register: UseFormRegister<TFieldValues>; setFocus: UseFormSetFocus<TFieldValues>; isExistInErrors: UseFormIsExistInErrors<TFieldValues>; }; interface UseFieldArrayField<TFieldValues extends FieldValues = FieldValues> { index: number; name: keyof TFieldValues; } interface UseFieldArrayProps<TFieldValues extends FieldValues> { control: UseFormControl<TFieldValues>; name: keyof TFieldValues; } declare type FieldPayload<TFieldValues extends FieldValues[] = FieldValues[], FieldNames extends string = TFieldValues extends (infer R)[] ? keyof R : ''> = { [K in FieldNames]?: TFieldValues extends (infer R)[] ? R[keyof R] : never; }; declare type UseFieldArrayInsert<TFieldValues extends FieldValues[]> = (startIndex: number, field: FieldPayload<TFieldValues>) => void; declare type UseFieldArrayAppend<TFieldValues extends FieldValues[]> = (field: FieldPayload<TFieldValues>) => void; declare type UseFieldArrayPrepend<TFieldValues extends FieldValues[]> = (field: FieldPayload<TFieldValues>) => void; declare type UseFieldArrayRemove = (id: number | number[]) => void; declare type UseFieldArraySwap = (from: number, to: number) => void; declare function useFieldArray<TFieldsValues extends FieldValues = FieldValues>(props: UseFieldArrayProps<TFieldsValues>): { append: UseFieldArrayAppend<TFieldsValues[keyof TFieldsValues] extends [infer R] ? R extends FieldValues ? R[] : FieldValues[] : FieldValues[]>; prepend: UseFieldArrayPrepend<TFieldsValues[keyof TFieldsValues] extends [infer R] ? R extends FieldValues ? R[] : FieldValues[] : FieldValues[]>; remove: UseFieldArrayRemove; insert: UseFieldArrayInsert<TFieldsValues[keyof TFieldsValues] extends [infer R] ? R extends FieldValues ? R[] : FieldValues[] : FieldValues[]>; swap: UseFieldArraySwap; fields: UseFieldArrayField<TFieldsValues>[]; }; declare function createSubmitHandler<T extends FieldValues = FieldValues>(fn: SubmitHandler<T>): SubmitHandler<T>; declare function createErrorHandler<T extends FieldValues = FieldValues>(fn: SubmitErrorHandler<T>): SubmitErrorHandler<T>; declare function set<T extends object, K extends keyof T>(obj: T, key: K, value: T[K] | any): boolean; declare function get<T extends object, K extends keyof T>(obj: T, key: K): T[K] | undefined; declare function unset<T extends object, K extends keyof T>(obj: T, key: K): boolean; declare const hasProp: <T extends object, K extends keyof T>(obj: T, key: K) => boolean; declare const isFunction: (val: unknown) => val is Function; declare const isNumber: (val: unknown) => val is number; declare const isString: (val: unknown) => val is string; declare const isBoolean: (val: unknown) => val is Boolean; declare const isObject: (val: unknown) => boolean; declare const isArray: (val: unknown) => val is unknown[]; declare const isEmptyObject: (val: unknown) => boolean; declare const isUndefined: (val: unknown) => val is undefined; declare const isNull: (val: unknown) => val is null; declare const isNullOrUndefined: (val: unknown) => boolean; declare const isHTMLElement: (val: unknown) => val is HTMLElement; declare const isEmpty: (val: unknown) => boolean; declare const isRegex: (val: unknown) => val is RegExp; declare const isObjectType: (val: unknown) => boolean; declare const isPrimitive: (val: unknown) => boolean; declare const isDateObject: (val: unknown) => val is Date; export { createErrorHandler, createSubmitHandler, get, hasProp, isArray, isBoolean, isDateObject, isEmpty, isEmptyObject, isFunction, isHTMLElement, isNull, isNullOrUndefined, isNumber, isObject, isObjectType, isPrimitive, isRegex, isString, isUndefined, set, unset, useFieldArray, useForm };