UNPKG

react-swift-form

Version:
64 lines (56 loc) 1.46 kB
import type { IUseInputsResult } from './useInputs'; import type { IError, IMainError, IMessages, IValidator, IValidatorObject, } from '../types'; import { useMemo } from 'react'; import { useInputs } from './useInputs'; export interface IUseInputProps { defaultValue?: unknown; id?: string; messages?: IMessages; name: string; onBlurOptOut?: boolean; onChangeOptOut?: boolean; transformer?: (value: unknown) => unknown; validator?: IValidator | IValidatorObject; } export interface IUseInputResult extends IUseInputsResult { error?: IMainError; errors: IError; } export function useInput(props: IUseInputProps): IUseInputResult { const { defaultValue, id, messages, name, onBlurOptOut, onChangeOptOut, transformer, validator, } = props; const names = useMemo(() => [name], [name]); const defaultValues = useMemo( () => (defaultValue !== undefined ? { [name]: defaultValue } : undefined), [defaultValue, name], ); const transformers = useMemo( () => (transformer !== undefined ? { [name]: transformer } : undefined), [name, transformer], ); const { errors, ...rest } = useInputs({ defaultValues, id: id ?? name, messages, names, onBlurOptOut: onBlurOptOut ? name : undefined, onChangeOptOut: onChangeOptOut ? name : undefined, transformers, validators: validator, }); return { ...rest, error: errors.main, errors }; }