balibabu
feat: Extract the code for building categorize operator coordinates to hooks.ts #1739 (#2005)
16f8eca
raw
history blame
5.03 kB
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;