import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons'; | |
import { Button, Form, Input } from 'antd'; | |
const BeginDynamicOptions = () => { | |
return ( | |
<Form.List | |
name="options" | |
rules={[ | |
{ | |
validator: async (_, names) => { | |
if (!names || names.length < 1) { | |
return Promise.reject(new Error('At least 1 option')); | |
} | |
}, | |
}, | |
]} | |
> | |
{(fields, { add, remove }, { errors }) => ( | |
<> | |
{fields.map((field, index) => ( | |
<Form.Item | |
label={index === 0 ? 'Options' : ''} | |
required={false} | |
key={field.key} | |
> | |
<Form.Item | |
{...field} | |
validateTrigger={['onChange', 'onBlur']} | |
rules={[ | |
{ | |
required: true, | |
whitespace: true, | |
message: 'Please input option or delete this field.', | |
}, | |
]} | |
noStyle | |
> | |
<Input | |
placeholder="option" | |
style={{ width: '90%', marginRight: 16 }} | |
/> | |
</Form.Item> | |
{fields.length > 1 ? ( | |
<MinusCircleOutlined | |
className="dynamic-delete-button" | |
onClick={() => remove(field.name)} | |
/> | |
) : null} | |
</Form.Item> | |
))} | |
<Form.Item> | |
<Button | |
type="dashed" | |
onClick={() => add()} | |
icon={<PlusOutlined />} | |
block | |
> | |
Add field | |
</Button> | |
<Form.ErrorList errors={errors} /> | |
</Form.Item> | |
</> | |
)} | |
</Form.List> | |
); | |
}; | |
export default BeginDynamicOptions; | |