0.1.9 • Published 1 year ago

control-react-hook-form v0.1.9

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

control-react-hook-form

#   Install react hook form
npm install react-hook form
#or
yarn add react-hook-form

Simple package to optimize code using react hook form when you use Controller

basic Example

// components/FormControl.jsx
import { FormController } from 'control-react-hook-form';

const FormControl = props => {
  return (
    <FormController className="form__group" {...props}>
      <FormController.label className="form__label" />
      <FormController.control
        className="form__control"
        customError="form__control__error"
      />
      <FormController.error className="form__error" />
    </FormController>
  );
};

export default FormControl;
  • You can add this file in another folder
// utils/forms/userForm.ts
export const formAddUsuario = {
  name: {
    title: 'name',
    name: 'name',
    placeholder: 'username',
    rules: { required: { message: 'This field is required', value: true } }, //
    type:"text",
    // id for default is the title
  },
  password: {
    title: 'password',
    type: 'password',
    name: 'password',
    placeholder: 'user password',
    rules: { required: { message: 'This field is required', value: true } },
  },
  // ... more
};
// form
const App = () => {
  const { control, handleSubmit } = useForm();

  const onSubmit = data => {
    console.log(data); //
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <FormControlBasic control={control} {...addProductoForm.name} />
      <FormControlBasic control={control} {...addProductoForm.password} />
      <button type="submit">Sign up</button>
    </form>
  );
};

Custom

if you want to customize you form control

// file control example
import {
  FormController,
  FormControlComponent,
  FormControlPropsTotal,
} from 'control-react-hook-form';

const FormControlImage = props => {
  return (
    <FormController className="form__group" custom {...props}>
    
      {({ props,renderMethods } ) => {
        const { placeholder, onChange, value, ...rest } = props; // properties react hook form controller like error , placeholder,value,onChange,... etc
        return (
          <>
            <FormController.label className="form__label" />
            <input {...rest} onChange={e => onChange(e.target.files)} />
            <FormController.error className="form__error" />
          </>
        );
      }}
    </FormController>
  );
};

export default FormControlImage;

// <FormControlImage control={control} {...addProductoForm.image} />
const formImage = {
  image: {
    name: 'image',
    type: 'file',
    title: 'image',
    multiple:true,
    rules: {
      validate: (files: File[]) => {
        if (!files) {
          return 'This field is required';
        }
        for (const file of files) {
          if (
            !['image/jpeg', 'image/png', 'image/webp', 'image/jpeg'].includes(
              file.type
            )
          ) {
            return 'Formato no valid';
          }
        }
      },
    },
  },
};

Using Typescript

import { FormController, FormControlComponent } from 'control-react-hook-form';

const FormControl = <T extends object>(props: FormControlComponent<T>) => {
  return (
    <FormController className="form__group" {...props}>
      <FormController.label className="form__label" />
      <FormController.control
        className="form__control"
        customError="form__control__error"
      />
      <FormController.error className="form__error" />
    </FormController>
  );
};

export default FormControl;
interface Usuario {
  id: string;
  name: string;
  password: string;
}

export type AddUsuario = Omit<Usuario, 'id'>;

export const formAddUsuario: FormControlsCustom<AddUsuario> = {
  name: {
    title: 'name',
    name: 'name',
    placeholder: 'user name',
    type:"text",
    rules: { required: { message: 'This field is required', value: true } },
  },
  password: {
    title: 'password',
    type: 'password',
    name: 'password',
    placeholder: 'user password ',
    rules: { required: { message: 'This field is required', value: true } },
  },
};

const App = () => {
  const { control, handleSubmit } = useForm<AddUser>();

  const onSubmit = (data: AddUser) => {
    console.log(data); //
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <FormControlBasic control={control} {...addProductoForm.name} />
      <FormControlBasic control={control} {...addProductoForm.password} />
      <button type="submit">Sign up</button>
    </form>
  );
};

More examples in github repository in Typescript

0.1.9

1 year ago

0.1.2

1 year ago

0.1.1

1 year ago

0.1.8

1 year ago

0.1.7

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.6

1 year ago

0.1.5

1 year ago

0.0.11

1 year ago

0.0.10

1 year ago

0.0.9

1 year ago

0.0.8

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago