Skip to content
Snippets Groups Projects
Input.tsx 1.3 KiB
Newer Older
Valentino's avatar
Valentino committed
import React from 'react';
import { useController } from 'react-hook-form';

/* eslint-disable react/react-in-jsx-scope */
export const Input = ({ control, name, type = 'text', label, required, ...props }: InputProps) => {
Valentino's avatar
Valentino committed
  const {
    field,
    // fieldState: { invalid, isTouched, isDirty },
    // formState: { touchedFields, dirtyFields },
  } = useController({
    name,
    control,
    rules: { required },
Valentino's avatar
Valentino committed
    defaultValue: '',
  });

  return (
    <>
      {label && (
        <label htmlFor={name} className="block text-sm font-medium text-gray-700 mb-1">
          {label}
        </label>
      )}
      <input
        type={type}
        id={name}
        onChange={field.onChange} // send value to hook form
        onBlur={field.onBlur} // notify when input is touched/blur
        value={field.value ? field.value.toString() : ''} // input value
        name={name} // send down the input name
        ref={field.ref} // send input ref, so we can focus on input when error appear
        autoComplete="given-name"
        className="shadow-sm focus:ring-primary-500 focus:border-primary-500 block w-full sm:text-sm border-gray-300 rounded-md"
        {...props}
      />
    </>
  );
};

type InputProps = {
  control: any;
  name: string;
  type?: string;
  label?: string;
} & React.HTMLProps<HTMLInputElement>;