Util that creates formik form from basic object definition.
npm install @qest/form-generator
yarn add @qest/form-generator
import formGenerator from '@qest/form-generator';
import { FormDefinition } from '@qest/form-generator/types';
import React from 'react';
import * as yup from 'yup';
const SignInForm = () => {
const formDefinition: FormDefinition = {
onSubmit: (values, { setSubmitting }) => {
console.log(values);
setSubmitting(false);
},
gutter: 16,
fields: [
{
name: 'username',
label: t('forms.SignInForm.username'),
validation: yup.string().required(t('forms.validation.required')),
rowStart: true,
col: { span: 12 },
},
{
name: 'password',
type: 'password',
label: t('forms.SignInForm.password'),
validation: yup.string().required(t('forms.validation.required')),
rowEnd: true,
col: { span: 12 },
},
]
};
return formGenerator(formDefinition);
};
export default SignInForm;
in root of application:
formComponentMapping.projectSpecialSelect = (props: CombinedComponentProps) => {
return <div>{JSON.stringify(props, null, 2)}</div>;
};
in form definition you can, map props
(for instance, disable and toggle loading on button when submitting form):
{
component: 'button',
children: 'Submit',
htmlType: 'submit',
propMapping: (fieldProps) => ({
disabled: fieldProps.formProps.isSubmitting,
loading: fieldProps.formProps.isSubmitting,
}),
}
if you pass "custom" to component field, you can render anything trough "custom" prop:
{
name: 'custom',
component: 'custom',
custom: (props) => <div>{JSON.stringify(props, null, 2)}</div>,
}
validation accepts yup schema, and it supports crossField validation:
{
name: 'input',
label: 'input',
component: 'input',
validation: Yup.string().when('autocomplete', {
is: (autocomplete) => !!autocomplete,
then: Yup.string().required('required'),
}),
placeholder: 'placeholder',
}
From default it supports most of antd components:
Component | Link to doc |
---|---|
AutoComplete | AutoCompleteProps |
Button | ButtonProps |
Cascader | CascaderProps |
Checkbox | CheckboxProps |
CheckboxGroup | CheckboxProps |
DatePicker | DatePickerProps |
Input | InputProps |
InputNumber | InputNumberProps |
Radio | RadioGroupProps |
Rate | RateProps |
Select | SelectProps |
Slider | SliderProps |
Switch | SwitchProps |
TimePicker | TimePickerProps |
Transfer | TransferProps |
TreeSelect | TreeSelectProps |