gimme-react-form
is a React component library that generates forms based on a
TypeScript type and a simple configuration object.
Using amazing components from https://github.com/shadcn/ui !
To install the package, run:
npm install gimme-react-form
To use the library, import the GimmeForm
component and pass it the following
props:
-
schema
: a object configuration that defines the shape of the form data. Use the GimmeFormSchema type to convert your data type to a configuration object type. -
onSubmit
: a callback function that receives the form data when the form is submitted. -
defaultValues
(optional): an object that provides default values for the form fields. -
resolver
(optional): a Yup or Zod validation schema or custom resolver that validates the form data.
Example usage:
import { GimmeFormSchema, GimmeForm } from "gimme-react-form";
type FormData = {
name: string;
//better to use "|undefined" then "property?:"
age: number | undefined;
isMarried: boolean;
hobbies: {
name: string;
years: number;
}[];
};
const formType: GimmeFormSchema<FormData> = {
name: "string",
age: "number?",
isMarried: ["boolean", "Are you married?"], //or ['Married', 'Single'] to use switch instead of checkbox
hobbies: { name: "string", years: "number" },
};
const handleSubmit = (data: FormData) => {
console.log(data);
};
function App() {
return <GimmeForm type={formType} onSubmit={handleSubmit}/>;
}
The GimmeForm<T>
is React component that renders the form.
export function GimmeForm<T extends FieldValues>({ schema, onSubmit, defaultValues, resolver }: GimmeFormProps<T>) {
const formMethods = useForm<T>({ defaultValues, resolver });
const { handleSubmit, formState } = formMethods
return (
<FormProvider methods={formMethods} onSubmit={handleSubmit(onSubmit)}>
<GimmeFormInputs schema={schema} />
<LoadingButton type="submit" activeBtnText="Submit" loading={formState.isSubmitting} />
</FormProvider>
)
}
The GimmeFormInputs creates only inputs. Those are expected to be on the form connected with react-hook-forms as in GimmeForm function, but it's possible to initialize that separately.
The GimmeFormSchema<T>
type is used to convert a TypeScript type to a
configuration object type that defines the shape of the form fields.
Contributions are welcome! If you'd like to contribute to this project, please follow these steps:
- Fork this repository
- Clone your forked repository to your local machine
- Create a new branch: git checkout -b my-new-feature
- Make your changes and commit them: git commit -m 'Add some feature'
- Push to the branch: git push origin my-new-feature
- Create a new pull request
Please ensure that your code follows the existing coding style and includes examples and documentation for any new functionality.