balibabu
feat: Extract the code for building categorize operator coordinates to hooks.ts #1739 (#2005)
16f8eca
import { CloseOutlined } from '@ant-design/icons'; | |
import { Button, Card, Form, Input, Select, Typography } from 'antd'; | |
import React from 'react'; | |
import { useTranslation } from 'react-i18next'; | |
import { Operator } from '../constant'; | |
import { useBuildFormSelectOptions } from '../form-hooks'; | |
import { IOperatorForm } from '../interface'; | |
const subLabelCol = { | |
span: 7, | |
}; | |
const subWrapperCol = { | |
span: 17, | |
}; | |
const SwitchForm: React.FC = ({ | |
form, | |
onValuesChange, | |
nodeId, | |
}: IOperatorForm) => { | |
const { t } = useTranslation(); | |
const buildCategorizeToOptions = useBuildFormSelectOptions( | |
Operator.Categorize, | |
nodeId, | |
); | |
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']}> | |
<Select options={buildCategorizeToOptions([])} /> | |
</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']}> | |
<Select options={buildCategorizeToOptions([])} /> | |
</Form.Item> | |
<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; | |