0.6.0 β’ Published 7 months ago
antd-custom-form v0.6.0
antd-custom-form π
Say goodbye to the boilerplate blues! Introducing antd-custom-form
, your one-stop shop for all things form-related in Ant Design. Create forms that are as easy to set up as they are on the eyes.
Features π
- π Versatile Fields: Text, number, select, date, fileβyou name it, we've got it.
- π Ant Design BFF: Seamlessly integrates with your favorite UI library.
- π Flexible Layout: Uses Ant Design's grid system to make your forms look like a million bucks.
- π¬ Action Button Customization: Place 'em where you want 'em.
- π Initial Values: Because sometimes, you just want to give your users a head start.
Installation π οΈ
# With npm
npm i antd-custom-form
# Or if you're a yarn person
yarn add antd-custom-form
Props π
For the Form π
Prop | Required? | Default | Description |
---|---|---|---|
fieldGroups | Yes π¨ | - | An array of field groups. It's like Inception but for forms. |
onSubmit | Yes π¨ | - | What happens in the form, stays in the formβuntil you submit it. |
formControl | No π€· | - | Your very own Ant Design form instance. |
initialValue | No π€· | - | Pre-fill like a pro. |
layout | No π€· | "horizontal" | How do you like your forms? Stacked or side-by-side? |
actionButtonsPlacement | No π€· | "end" | Where the action happens. |
submitButton | No π€· | true | The button that seals the deal. |
resetButton | No π€· | true | The button that says, "Let's start over, shall we?" |
formProps | No π€· | - | Extra props? Yes, please! |
For the Fields π±
Prop | Required? | Default | Description |
---|---|---|---|
label | Yes π¨ | - | What's in a name? Well, a lot actually. |
name | Yes π¨ | - | The key to your field's heart. |
type | Yes π¨ | - | The personality of your field. |
list | Conditional π€ | - | The options that make your select fields happy. |
rules | No π€· | - | Keep your fields in check. |
hide | No π€· | false | Whether to render. |
formItemProps | No π€· | - | The props for each form item. |
inputProps | No π€· | - | The custom spices for each input. |
span | No π€· | 24 | How much personal space to give your field? |
π€ The
list
prop is only required forsingle-select
,multi-select
andtoggle
. For other field types, it's a "thanks, but no thanks" situation.
Usage π¨
Ready to create your first masterpiece? Here's a quick example to get you started:
import React from "react"
import { CustomForm, IFieldGroup } from "antd-custom-form"
import { Typography } from "antd"
interface Fields {
firstName: string
age: number
color: string
dob: Moment
hobbies: string[]
gender?: "male" | "female"
isEnabled?: boolean
bio: string
}
function App() {
const fieldsGroups: IFieldGroup<Fields> = [
[
{
label: "Name",
name: "firstName",
type: "text",
rules: [{ required: true, message: "Please enter a name" }],
hide: true,
formItemProps: {
validateStatus: "success",
hasFeedback: true,
},
},
{
label: "Age",
name: "age",
type: "number",
},
],
[
{
label: "Favorite Color",
name: ["color"],
type: "single-select",
list: [
{ label: "Red", value: "red" },
{ label: "Blue", value: "blue" },
{ label: "Green", value: "green" },
],
},
{
label: "Date of Birth",
name: "dob",
type: "date",
},
],
[
{
label: "Hobbies",
name: "hobbies",
type: "checkbox",
list: [
{ label: "Hobby 1", value: "h1" },
{ label: "Hobby 2", value: "h2" },
],
},
{
label: "Gender",
name: "gender",
type: "radio",
list: [
{ label: "Male", value: "male" },
{ label: "Female", value: "female" },
],
},
],
[
{
label: "Bio",
name: "bio",
type: "textarea",
},
{
label: "Is Active?",
name: "isEnabled",
type: "toggle",
list: [
{ label: "Yes", value: true },
{ label: "No", value: false },
],
},
],
]
const handleSubmit = (data: Fields) => {
console.log("Form Data:", data)
}
return (
<div style={{ width: "70vw", marginInline: "auto" }}>
<Typography.Title>Basic Form</Typography.Title>
<CustomForm
fieldGroups={fieldsGroups}
onSubmit={handleSubmit}
resetButton={false}
layout="vertical"
initialValues={{
firstName: "Osama",
age: 27,
color: "teal",
dob: moment(),
hobbies: [],
bio: "",
}}
/>
</div>
)
}
License π
MIT