1.3.5 • Published 2 years ago

lx-react-form v1.3.5

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

LX React Form

Notas de atualização

1.3.5

  • Fix: arrumando tipagem do maxLength

1.3.4

  • Fix: arrumando problema em custom validations

1.3.2

  • Feat: regra customizada para useInput e useNumber (é possível criar a propria regra de validação)

1.3.0

  • Feat: agora é possível validar multiplas vezes um mesmo campo com regex
  • Fix: máscara de CNPJ corrigida

1.2.2

  • Feat: stepCallbacks (execução de função a cada avanço de etapa)
  • Feat: maxLength para o hook useInput

1.2.1

  • Feat: melhorando comportamento de validação

1.2.0

  • Refactor: Código raiz refatorado para Typescript
  • Feat: novos hooks useCheckboxGroup, useRadio e useNumber

1.1.3

  • Fix Correção de pequenos bugs
  • Feat: Lançamento da feature de steps (formulários em etapa)

1.0.2

  • Fix: (Essencial) Correção de bugs que impediam o envio de select e checkbox na função handleSubmit

O LX React Form é uma biblioteca brasileira de formulários para React criado em formato de hook.

Leve flexível e com diversas features a disposição, como: validação de diversos tipos de campos (input, checkbox, select), possibilidade de validação com regex, máscaras (padrões e costumizadas) e muito mais.

Instalação

Você pode instalar o LX React Form como um pacote NPM utilizando o comando

npm install lx-react-form

ou

yarn add lx-react-form

Exemplo completo

import { useForm, useInput } from "lx-react-form";

const name = useInput({
  name: "name",
});

const email = useInput({
  name: "email",
  validation: "email",
});

const password = useInput({
  name: "password",
  validation: "senha",
});

const form = useForm({
  clearFields: true,
  formFields: [name, email, password],
  submitCallback: (formData) => {
    console.log(formData);
  },
});

return (
  <form onSubmit={form.handleSubmit}>
    <input type="text" {...name.inputProps} />
    {name.error && <p>{name.error}</p>}

    <input type="email" {...email.inputProps} />
    {email.error && <p>{email.error}</p>}

    <input type="password" {...password.inputProps} />
    {password.error && <p>{password.error}</p>}

    <button type="submit">Enviar</button>
  </form>
);

(useInput) - Validações de input (text, email, number) ou textarea

Você pode validar esses tipos de campo com o hook useInput

import { useInput } from "lx-react-form";

const example = useInput({
  name: "example",
  maxLength: 15,
  validation: "telefone",
  mask: "telefone",
});

return (
  <form>
    <input type="text" {...example.inputProps} />
    {example.error && <p>{example.error}</p>}
  </form>
);

Confira abaixo todas as opções disponíveis para o hook useInput

OpçõesObrigatórioDescrição
nameSim*O nome do campo é essencial para identificação tanto no HTML quanto no hook useForm
optionalNãoDefine se o campo é opcional ou não, padrão false.
initialValueNãoDefine um valor inicial para o campo
sameNãoPermite relacionar campos, para exigir que o valor dos mesmos precise corresponder
minLengthNãoO número de caracteres mínimo para o respectivo campo
maxLengthNãoO número de caracteres máximo para o respectivo campo
validationNãoUtiliza uma validação padrão disponível: email, cep, senha, telefone
customValidationsNãoPermite a utilização de regex próprio para validação
maskNãoUtiliza uma máscara padrão disponível: cep, cpf, cnpj, telefone, inteiros
customMaskNãoPermite o uso de uma máscara customizada
errorTextNãoPermite customizar a mensagens de erro de padrão: required, same e minLength
customRuleNãoObjeto contendo função callback com regra customizada e mensagem de erro

Exemplo same

import { useInput } from "lx-react-form";

const password = useInput({
  name: "password",
  validation: "senha",
});

const confirmpassword = useInput({
  name: "confirmpassword",
  same: password.value,
});

return (
  <form>
    <input type="password" {...password.inputProps} />
    {password.error && <p>{password.error}</p>}

    <input type="password" {...confirmpassword.inputProps} />
    {confirmpassword.error && <p>{confirmpassword.error}</p>}
  </form>
);

Exemplo customValidation

Valida o campo comparando ao regex fornecido

import { useInput } from "lx-react-form";

const password = useInput({
  name: "password",
  customValidations: [
    {
      regex: /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/,
      error:
        "Sua senha precisa conter 8 caracteres, pelo menos uma letra e um número",
    },
  ],
});

return (
  <form>
    <input type="password" {...password.inputProps} />
    {password.error && <p>{password.error}</p>}
  </form>
);

Exemplo customMask

Aplica a máscara fornecida ao campo

import { useInput } from "lx-react-form";

const birthDate = useInput({
  name: "birthdate",
  minLenght: 10,
  maxLength: 10,
  customMask: {
    expressions: [
      {
        regex: /\D/g,
        replace: "",
      },
      {
        regex: /(\d{2})(\d)/,
        replace: "$1/$2",
      },
      {
        regex: /(\d{2})(\d{4})/,
        replace: "$1/$2",
      },
    ],
  },
});

return (
  <form>
    <input type="text" {...birthDate.inputProps} />
    {birthDate.error && <p>{birthDate.error}</p>}
  </form>
);

Exemplo customRule

É possível criar uma regra customizada de validação

import { useInput } from "lx-react-form";

const batatinha = useInput({
  name: "batatinha",
  customRule: {
    callback: (value) => {
      if(value === "batatinha"){
        return true;
      } else {
        return false;
      }
    },
    error: 'Este campo não é uma batatinha!'
  }
});

return (
  <form>
    <input type="password" {...password.inputProps} />
    {password.error && <p>{password.error}</p>}
  </form>
);

Exemplo alterando errorText

Configurando as mensagens de erro padrão

import { useInput } from "lx-react-form";

const password = useInput({
  name: "password",
  errorText: {
    required: "This field is required",
    same: "Confirm password must match with password",
    minLength: "Password must contain at least 8 characters",
  },
});

return (
  <form>
    <input type="password" {...password.inputProps} />
    {password.error && <p>{password.error}</p>}
  </form>
);

(useNumber) - hook para validar input núméricos

Você pode validar input númericos com useNumber

import { useNumber } from "lx-react-form";

const age = useNumber({
  name: "age",
  min: 18,
  max: 65,
});

return (
  <form>
    <input type="number" {...age.inputProps} />
    {age.error && <p>{age.error}</p>}
  </form>
);

Confira todas as opções disponíveis para o hook useNumber

OpçõesObrigatórioDescrição
nameSim*O nome do campo é essencial para identificação tanto no HTML quanto no hook useForm
optionalNãoDefine se o campo é opcional ou não, padrão false.
minNãoNúmero mínimo
maxNãoNúmero máximo
optionalNãoDefine se o campo é opcional ou não, padrão false.
initialValueNãoDefine um valor inicial para o campo
errorTextNãoPermite customizar a mensagens de erro de padrão: required, min e max
customRuleNãoObjeto contendo função callback com regra customizada e mensagem de erro

(useCheckbox) - Validações de checkbox (type checkbox)

Você pode validar checkbox com o hook useCheckbox

import { useCheckbox } from "lx-react-form";

const example = useCheckbox({
  name: "privacy",
});

return (
  <form>
    <label htmlFor={example.name}>
      <input type="checkbox" {...example.inputProps} />
      <span>Eu aceito a política de privicidade</span>
    </label>
    {example.error && <p>{example.error}</p>}
  </form>
);

Confira abaixo todas as opções disponíveis para o hook useCheckbox

OpçõesObrigatórioDescrição
nameSim*O nome do campo é essencial para identificação tanto no HTML quanto no hook useForm
optionalNãoDefine se o campo é opcional ou não, padrão false.
initialValueNãoDefine um valor inicial para o campo (precisa ser obrigatoriamente true ou false)
errorTextNãoPermite customizar a mensagens de erro de padrão: required

(useCheckboxGroup) - hook para validar multiplos grupos de checkbox

Você pode validar grupos de checkbox com useCheckboxGroup (considerando o grupo com um único item do formulário)

import { useCheckboxGroup } from "lx-react-form";

const categories = useCheckboxGroup({
  initialValue: ["acao"],
  name: "categories",
  min: 1,
  max: 3,
});

return (
  <form>
    <div>
      <label>
        Ação
        <input
          type="checkbox"
          value="acao"
          {...categories.inputProps}
          checked={categories.value.includes("acao") ? true : false}
        />
      </label>

      <label>
        Comédia
        <input
          type="checkbox"
          value="comedia"
          {...categories.inputProps}
          checked={categories.value.includes("comedia") ? true : false}
        />
      </label>

      <label>
        Drama
        <input
          type="checkbox"
          value="drama"
          {...categories.inputProps}
          checked={categories.value.includes("drama") ? true : false}
        />
      </label>

      <label>
        Terror
        <input
          type="checkbox"
          value="terror"
          {...categories.inputProps}
          checked={categories.value.includes("terror") ? true : false}
        />
      </label>
    </div>
    {categories.error && <p>{categories.error}</p>}
  </form>
);

Confira todas as opções disponíveis para o hook useCheckboxGroup

OpçõesObrigatórioDescrição
nameSim*O nome do campo é essencial para identificação tanto no HTML quanto no hook useForm
optionalNãoDefine se o campo é opcional ou não, padrão false.
minNãoNúmero mínimo necessário de checkbox marcados
maxNãoNúmero máximo necessário de checkbox marcados
optionalNãoDefine se o campo é opcional ou não, padrão false.
initialValueNãoDefine um valor inicial para o campo
errorTextNãoPermite customizar a mensagens de erro de padrão: required, min e max

(useRadio) - hook para validar grupos de radio

Você pode validar grupos de radio com useRadio (considerando o grupo com um único item do formulário)

import { useRadio } from "lx-react-form";

const biscuit = useCheckboxGroup({
  name: "biscuit",
});

return (
  <form>
    <div>
      <label>
        Bolacha
        <input
          type="radio"
          value="bolacha"
          {...biscuit.inputProps}
          checked={biscuit.includes("bolacha") ? true : false}
        />
      </label>

      <label>
        Biscoito
        <input
          type="radio"
          value="biscoito"
          {...biscuit.inputProps}
          checked={biscuit.includes("biscoito") ? true : false}
        />
      </label>
    </div>
    {biscuit.error && <p>{biscuit.error}</p>}
  </form>
);

Confira todas as opções disponíveis para o hook useRadio

OpçõesObrigatórioDescrição
nameSim*O nome do campo é essencial para identificação tanto no HTML quanto no hook useForm
optionalNãoDefine se o campo é opcional ou não, padrão false.
initialValueNãoDefine um valor inicial para o campo
errorTextNãoPermite customizar a mensagens de erro de padrão: required

(useSelect) - Validações de select

Você pode validar select com o hook useSelect

import { useSelect } from "lx-react-form";

const example = useSelect({
  name: "ocupation",
});

return (
  <form>
    <select {...example.inputProps}>
      <option value="">Selecione uma ocupação</option>
      <option value="pedreiro">Pedreiro</option>
      <option value="padeiro">Padeiro</option>
    </select>
    {example.error && <p>{example.error}</p>}
  </form>
);

Confira abaixo todas as opções disponíveis para o hook useSelect

OpçõesObrigatórioDescrição
nameSim*O nome do campo é essencial para identificação tanto no HTML quanto no hook useForm
optionalNãoDefine se o campo é opcional ou não, padrão false.
initialValueNãoDefine um valor inicial para o campo
errorTextNãoPermite customizar a mensagens de erro de padrão: required

(useForm) - hook para gerar a função de envio dos formulários

O useForm condensa os campos em única lista e executa todas as validações antes de executar a função de envio

import { useForm } from "lx-react-form";

const form = useForm({
  clearFields: true,
  formFields: [campo1, campo2, campo3],
  submitCallback: (formData) => {
    console.log(formData);
  },
});

return (
  <form onSubmit={form.handleSubmit}>
    <input type="text" {...name.inputProps} />
    {name.error && <p>{name.error}</p>}

    <input type="email" {...email.inputProps} />
    {email.error && <p>{email.error}</p>}

    <input type="password" {...password.inputProps} />
    {password.error && <p>{password.error}</p>}

    <button type="submit">Enviar</button>
  </form>
);
OpçõesObrigatórioDescrição
clearFieldsNãoLimpa os campos após um envio bem sucedido do formulário
formFieldsSim*Lista de campos do formulário (se refere aos hooks instaciados)
submitCallbackNãoFunção de callback do envio, recebe como parâmetro padrão formData contendo um objeto com todos os campos e valores

Formulários de etapas - uso avançado do useForm

Com o useForm é possível, além da criação de formulários convencionais, formulários com etapas

import { useForm, useInput } from "lx-react-form";

const name = useInput({
  name: "name",
});

const email = useInput({
  name: "email",
  validation: "email",
});

const password = useInput({
  name: "password",
  validation: "senha",
});

const form = useForm({
  clearFields: true,
  stepFields: {
    0: [name, email],
    1: [password],
  }
  formFields: [name, email, password],
  submitCallback: (formData) => {
    console.log(formData);
  },
});

return (
  <form onSubmit={form.handleSubmit}>
    {form.step === 0 && (
      <>
        <input type="text" {...name.inputProps} />
        {name.error && <p>{name.error}</p>}

        <input type="email" {...email.inputProps} />
        {email.error && <p>{email.error}</p>}

        <button type="button" onClick={form.nextStep}>
          Avançar
        </button>
      </>
    )}

    {form.step === 1 && (
      <>
        <input type="password" {...password.inputProps} />
        {password.error && <p>{password.error}</p>}

        <button type="button" onClick={form.previousStep}>
          Voltar
        </button>

        <button type="submit">Enviar</button>
      </>
    )}

  </form>
);
OpçõesObrigatórioDescrição
stepFieldsSim*Um objeto contendo uma lista de campos para cada etapa do formulário
stepCallbacksNãoUm objeto contendo um função de callback para cada etapa do formulário
stepModeNãoNo modo onChange, permite que as validações aconteçam (sem notificação de erro) a cada alteração mínima de campo (pode servir para liberar os botões de avançar e enviar somente quando todos os requisitos estiverem preenchidos)
stepClearFieldsOnBackNãoA função previousStep limpa os campos da etapa respectiva

Exemplo de etapas com stepMode onChange

import { useForm, useInput } from "lx-react-form";

const name = useInput({
  name: "name",
});

const email = useInput({
  name: "email",
  validation: "email",
});

const password = useInput({
  name: "password",
  validation: "senha",
});

const form = useForm({
  clearFields: true,
  stepMode: "onChange"
  stepFields: {
    0: [name, email],
    1: [password],
  }
  formFields: [name, email, password],
  submitCallback: (formData) => {
    console.log(formData);
  },
});

return (
  <form onSubmit={form.handleSubmit}>
    {form.step === 0 && (
      <>
        <input type="text" {...name.inputProps} />
        {name.error && <p>{name.error}</p>}

        <input type="email" {...email.inputProps} />
        {email.error && <p>{email.error}</p>}

        {form.canProceed && (
          <button type="button" onClick={form.nextStep}>
            Avançar
          </button>
        )}
      </>
    )}

    {form.step === 1 && (
      <>
        <input type="password" {...password.inputProps} />
        {password.error && <p>{password.error}</p>}

        <button type="button" onClick={form.previousStep}>
          Voltar
        </button>
        {form.canProceed && (
          <button type="submit">Enviar</button>
        )}
      </>
    )}
  </form>
);

This is LX React Form!

1.3.5

2 years ago

1.3.4

3 years ago

1.3.3

3 years ago

1.3.2

3 years ago

1.3.0

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago