|
|
|
@@ -1,5 +1,142 @@ |
|
|
|
const SwitchForm = () => { |
|
|
|
return <div>Switch</div>; |
|
|
|
import { CloseOutlined } from '@ant-design/icons'; |
|
|
|
import { Button, Card, Form, Input, Typography } from 'antd'; |
|
|
|
import React from 'react'; |
|
|
|
import { useTranslation } from 'react-i18next'; |
|
|
|
import { IOperatorForm } from '../interface'; |
|
|
|
|
|
|
|
const subLabelCol = { |
|
|
|
span: 7, |
|
|
|
}; |
|
|
|
|
|
|
|
const subWrapperCol = { |
|
|
|
span: 17, |
|
|
|
}; |
|
|
|
|
|
|
|
const SwitchForm: React.FC = ({ form, onValuesChange }: IOperatorForm) => { |
|
|
|
const { t } = useTranslation(); |
|
|
|
|
|
|
|
return ( |
|
|
|
<Form |
|
|
|
labelCol={{ span: 8 }} |
|
|
|
wrapperCol={{ span: 16 }} |
|
|
|
form={form} |
|
|
|
name="dynamic_form_complex" |
|
|
|
autoComplete="off" |
|
|
|
initialValues={{ conditions: [{}] }} |
|
|
|
onValuesChange={onValuesChange} |
|
|
|
> |
|
|
|
<Form.Item label={t('flow.to')} name={['end_cpn_id']}> |
|
|
|
<Input /> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item label={t('flow.no')} name={['no']}> |
|
|
|
<Input /> |
|
|
|
</Form.Item> |
|
|
|
<Form.List name="conditions"> |
|
|
|
{(fields, { add, remove }) => ( |
|
|
|
<div style={{ display: 'flex', rowGap: 16, flexDirection: 'column' }}> |
|
|
|
{fields.map((field) => ( |
|
|
|
<Card |
|
|
|
size="small" |
|
|
|
title={`Item ${field.name + 1}`} |
|
|
|
key={field.key} |
|
|
|
extra={ |
|
|
|
<CloseOutlined |
|
|
|
onClick={() => { |
|
|
|
remove(field.name); |
|
|
|
}} |
|
|
|
/> |
|
|
|
} |
|
|
|
> |
|
|
|
<Form.Item |
|
|
|
label={t('flow.logicalOperator')} |
|
|
|
name={[field.name, 'logical_operator']} |
|
|
|
> |
|
|
|
<Input /> |
|
|
|
</Form.Item> |
|
|
|
|
|
|
|
<Form.Item label={t('flow.to')} name={[field.name, 'to']}> |
|
|
|
<Input /> |
|
|
|
</Form.Item> |
|
|
|
{/* Nest Form.List */} |
|
|
|
<Form.Item label="Items"> |
|
|
|
<Form.List name={[field.name, 'items']}> |
|
|
|
{(subFields, subOpt) => ( |
|
|
|
<div |
|
|
|
style={{ |
|
|
|
display: 'flex', |
|
|
|
flexDirection: 'column', |
|
|
|
rowGap: 16, |
|
|
|
}} |
|
|
|
> |
|
|
|
{subFields.map((subField) => ( |
|
|
|
<Card |
|
|
|
key={subField.key} |
|
|
|
title={null} |
|
|
|
size="small" |
|
|
|
extra={ |
|
|
|
<CloseOutlined |
|
|
|
onClick={() => { |
|
|
|
subOpt.remove(subField.name); |
|
|
|
}} |
|
|
|
/> |
|
|
|
} |
|
|
|
> |
|
|
|
<Form.Item |
|
|
|
label={'cpn_id'} |
|
|
|
name={[subField.name, 'cpn_id']} |
|
|
|
labelCol={subLabelCol} |
|
|
|
wrapperCol={subWrapperCol} |
|
|
|
> |
|
|
|
<Input placeholder="cpn_id" /> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
label={'operator'} |
|
|
|
name={[subField.name, 'operator']} |
|
|
|
labelCol={subLabelCol} |
|
|
|
wrapperCol={subWrapperCol} |
|
|
|
> |
|
|
|
<Input placeholder="operator" /> |
|
|
|
</Form.Item> |
|
|
|
<Form.Item |
|
|
|
label={'value'} |
|
|
|
name={[subField.name, 'value']} |
|
|
|
labelCol={subLabelCol} |
|
|
|
wrapperCol={subWrapperCol} |
|
|
|
> |
|
|
|
<Input placeholder="value" /> |
|
|
|
</Form.Item> |
|
|
|
</Card> |
|
|
|
))} |
|
|
|
<Button |
|
|
|
type="dashed" |
|
|
|
onClick={() => subOpt.add()} |
|
|
|
block |
|
|
|
> |
|
|
|
+ Add Sub Item |
|
|
|
</Button> |
|
|
|
</div> |
|
|
|
)} |
|
|
|
</Form.List> |
|
|
|
</Form.Item> |
|
|
|
</Card> |
|
|
|
))} |
|
|
|
|
|
|
|
<Button type="dashed" onClick={() => add()} block> |
|
|
|
+ Add Item |
|
|
|
</Button> |
|
|
|
</div> |
|
|
|
)} |
|
|
|
</Form.List> |
|
|
|
|
|
|
|
<Form.Item noStyle shouldUpdate> |
|
|
|
{() => ( |
|
|
|
<Typography> |
|
|
|
<pre>{JSON.stringify(form?.getFieldsValue(), null, 2)}</pre> |
|
|
|
</Typography> |
|
|
|
)} |
|
|
|
</Form.Item> |
|
|
|
</Form> |
|
|
|
); |
|
|
|
}; |
|
|
|
|
|
|
|
export default SwitchForm; |