npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

iara-form-kit

v0.1.7

Published

<p align="center"> <img src="https://i.ibb.co/Rchw50r/iara-form-log.png" /> </p>

Downloads

30

Readme

> IaraForm


O Iara-Form é uma biblioteca React que simplifica a criação de formulários de forma simples e compacta. A Iaraform utiliza 2 bibliotecas: jquense/yup e Unform, respectivamente, uma possibilita a validação e transformação dos dados e outra a gestão e agrupamento. Neste guia rápido, vamos explorar um exemplo básico de utilização da biblioteca.

> Inicio Rápido

Instalação


Certifique-se de ter a biblioteca instalada no seu projeto. Você pode instalá-la usando npm ou yarn:

npm install iara-form-kit 
# ou 
yarn add iara-form-kit

Configuração Inicial


Importe os componentes necessários do Iara-Form no seu arquivo:

import {
  IFormConfiguration,
  IInputIaraForm,
  IaraForm,
  InputField,
  iaraSchema,
} from "iara-form-kit";

Construa sua base de Elementos Personalizados


Defina elementos de formulário personalizados, neste caso, um componente de entrada de texto:

const elements = {
  input: (params: IInputIaraForm) => <InputField {...params} />,
};

Interface do Formulário


Declare uma interface para representar a estrutura dos dados do seu formulário:

interface IFormLogin {
  name: string;
  password: string;
}

Configuração do Formulário


Configure seu formulário especificando seções, títulos e campos:

const config: IFormConfiguration<typeof elements, IFormLogin> = {
  section: [
    {
      title: "Login",
      fields: [
        {
          label: "Nome",
          inputField: "input",
          serverProperty: "name",
          validate: iaraSchema.string().required(),
        },
        {
          label: "Senha",
          inputField: "input",
          serverProperty: "password",
          validate: iaraSchema.string().required(),
          type: "password",
        },
      ],
    },
  ],
  elements: elements,
};

Formulário


No componente principal do seu aplicativo, defina uma função para lidar com o envio do formulário:

export function App() {
  const handleFormSubmit = (data) => {
    console.log(data);
  };

  return <IaraForm formConfiguration={config} onSubmit={handleFormSubmit} />;
}

Exemplo completo


import {
  IFormConfiguration,
  IInputIaraForm,
  IaraForm,
  InputField,
  iaraSchema,
} from "iara-form-kit";

const elements = {
  input: (params: IInputIaraForm) => <InputField {...params} />,
};
interface IFormLogin {
  name: string;
  password: string;
}
const config: IFormConfiguration<typeof elements, IFormLogin> = {
  section: [
    {
      title: "Login",
      fields: [
        {
          label: "Nome",
          inputField: "input",
          serverProperty: "name",
          validate: iaraSchema.string().required(),
        },
        {
          label: "Senha",
          inputField: "input",
          serverProperty: "password",
          validate: iaraSchema.string().required(),
          type: "password",
        },
      ],
    },
  ],
  elements: elements,
};

export function App() {
  const handleFormSubmit = (data) => {
    console.log(data);
  };
  return <IaraForm formConfiguration={config} onSubmit={handleFormSubmit} />;
}

> Passo-a-Passo

Configuração Básica Field


Para montar o seu formulário primeiro você deve construir um ReactComponent. A função receberá parâmetros que atenda a interface IInputIaraForm.

export function InputField({
  label,
  serverProperty
}: IInputIaraForm) [...]

No corpo do ReactCompoenent você deve chamar o hook useIaraFormField e passar como parâmetro a property. Você terá a disposição 6 retornos

  • fieldName: Campo do formulario ele deve ser valorado com o id do seu input.
  • defautValue: valor padrão que você definir.
  • error: mensagem de erro gerada.
  • clearError: função para limpar o erro gerado.
  • registerField: registra o seu formulário
  • handleValidate: função responsável por ativar a validação do seu formulário.
  const {
    fieldName,
    registerField,
    defaultValue,
    error,
    handleValidate,
    clearError,
  } = useIaraFormField(property);

Após invocar o handler você deve registrar o seu campo assim que ele for iniciado.

  const inputRef = useRef<HTMLInputElement>(null);

  useEffect(() => {
    registerField({
      name: fieldName,
      ref: inputRef,
      getValue: (ref) => {
        return ref.current.value;
      },
      setValue: (ref, newValue) => {
        ref.current.value = newValue;
      },
      clearValue: (ref) => {
        ref.current.value = "";
      },
    });
  }, [registerField, fieldName]);

return (
	<div>
      <label htmlFor={fieldName}>{label}</label>
      <input
        id={fieldName}
        ref={inputRef}
        defaultValue={defaultInputValue}
        {...props}
      />
      {error && <span>{error}</span>}
    </div>
    )

Exemplo completo de um campo normal interagindo interação com o MUI.

export function InputField({
  label,
  placeholder,
  property,
  required,
  ...props
}: IInputIaraForm) {
  const {
    fieldName,
    registerField,
    defaultValue,
    error,
    handleValidate,
    clearError,
  } = useIaraFormField(property);
  const inputRef = useRef<HTMLInputElement>(null);

  useEffect(() => {
    registerField({
      name: fieldName,
      ref: inputRef,
      getValue: (ref) => {
        return ref.current.value;
      },
      setValue: (ref, newValue) => {
        ref.current.value = newValue;
      },
      clearValue: (ref) => {
        ref.current.value = "";
      },
    });
  }, [registerField, fieldName]);

  return (
    <FormControl fullWidth>
      <Typography variant={"subtitle1"} pb={1} pt={2} component={"div"}>
        {label}
        {required ? "*" : null}:
      </Typography>
      <TextField
        error={!!error}
        helperText={error}
        onKeyDown={() => (error ? clearError() : undefined)}
        placeholder={`${placeholder}`}
        variant="outlined"
        onBlur={handleValidate}
        inputProps={{ id: fieldName, ...props }}
        inputRef={inputRef}
        defaultValue={defaultValue}
      />
    </FormControl>
  );
}

Definindo Campos


Após a criação do(s) campo(s) você deve criar um objeto atribuindo a key com o nome que desejar. A key é utilizada na configuração para direcionar o campo do formulario.

export const DefaultFields = {
  inputField: (params: IInputIaraForm) => <InputField {...params} />,
  passwordField: (params: IInputIaraForm) => <PasswordField  {...params} />,
};

Configuração


Esta etapa é responsável por montar a estrutura do seu formulário. Você deve criar um objeto do tipo IFormConfiguration<T, K>. Ele recebe dois parâmetros. O primeiro define os types disponível para o campo inputField. O segundo define os types disponível para o campo property. O aconselhável é, para T, inserir um typeof do objeto que define os campos. E, para K, passar uma interface que contenha todas as propriedades do formulário.

export const config: IFormConfiguration<typeof InputsLogin, IUserLogin> = {}

Assim você conseguirá construir o restante do seu formulário com facilidade. A estrutura básica consiste em:

  • steps*: um array que contém o titulo da suas etapa, bem como os campos que a compõe.
    • title*: titulo da sua etapa.
    • fields*: campos do seu formulário. Os principais campos são.

[!NOTE] Os demais campos em fields são herdados da interface básica de input dentro do React. E podem ser manipulados livremente.

export const config: IFormConfiguration<typeof InputsLogin, IUserLogin> = {
  steps: [
    {
      title: "Login",
      fields: [
        {
          label: "CPF ou Email",
          property: "emailOrCpf",
          inputField: "inputField",
          placeholder: "Digite seu email ou cpf",
          required: true,
          validate: iaraSchema.string().required(),
        },
        {
          label: "Senha",
          property: "password",
          inputField: "passwordField",
          placeholder: "Digite sua senha",
          required: true,
          validate: iaraSchema.string().required(),
        },
      ],
    },
  ],
  elements: InputsLogin,
};

Formulário


Para visualizar o seu formulário basta criar uma função e chamar o elemento Form passando como parâmetro a sua configuração e uma função no método onSubmit.

export function Login(){
  const handlerSubmit = (payload) => {
  // Manipule o conjunto de dados.
  }
  return <Form formConfiguration={config} onSubmit={handlerSubmit} />
}

useWatch


Observar o valor de uma determinada propriedade, desde previamente registrada nas configurações como serverProperty. O hook torna possível realizar interações dinâmicas com outros campos. Por exemplo, se antes de carregar uma listagem de cidade, você precisa ter o identificador do estado.

function FieldTest() {
  const value = useWatch("stateId");
  return <SelectCity stateId={value} disabled={!value}/>;
}

Interações Possíveis


Você pode definir a configuração do formulário dentro de um componente ou contexto. Desta forma poderá realizar validações extras em virtude de exibir ou não um determinado campo.

const config: IFormConfiguration<typeof InputsLogin, IUserLogin> =
    useMemo(() => {
      let formConfiguration: IFormConfiguration<
        typeof InputsLogin,
        IUserLogin
      > = {
        steps: [
          {
            title: "Dados básicos",
            fields: [
              {
                label: "CPF ou Email",
                serverProperty: 'emailOrCpf',
                inputField: "inputField",
                placeholder: "Digite seu email ou cpf",
                required: true,
                validate: iaraSchema.string().required(),
              },
            ],
          },
        ],
        elements: InputsLogin,
      };

      if (hasPermission("sysAdmin")) {
        formConfiguration = {
          ...formConfiguration,
          ...{
            steps: [
              {
                title: "Claim",
                fields: [
                  {
                    label: "Permissão",
                    serverProperty: "permission",
                    inputField: "inputPermissions",
                    required: true,
                    validate: iaraSchema.string().required(),
                  },
                ],
              },
            ],
          },
        };
      }

      return formConfiguration;
    }, []);

Você tem acesso a estrutura básica do IaraForm dentro dos campos através do hook useIaraForm.

  const {
    schemaObject,
    formConfiguration,
    formRef,
    section,
    setStep
    setformConfiguration,
  } = useIaraForm();