Skip to content

Commit

Permalink
feat: Add complex dynamic form to SwitchForm infiniflow#1739 (infinif…
Browse files Browse the repository at this point in the history
…low#2001)

### What problem does this PR solve?

feat: Add complex dynamic form to SwitchForm infiniflow#1739

### Type of change

- [x] New Feature (non-breaking change which adds functionality)
  • Loading branch information
cike8899 authored Aug 19, 2024
1 parent edadba5 commit 982ea49
Show file tree
Hide file tree
Showing 5 changed files with 143 additions and 3 deletions.
1 change: 1 addition & 0 deletions web/src/locales/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -807,6 +807,7 @@ The above is the content you need to summarize.`,
port: 'Port',
password: 'Password',
switch: 'Switch',
logicalOperator: 'Logical operator',
},
footer: {
profile: 'All rights reserved @ React',
Expand Down
1 change: 1 addition & 0 deletions web/src/locales/zh-traditional.ts
Original file line number Diff line number Diff line change
Expand Up @@ -765,6 +765,7 @@ export default {
port: '端口',
password: '密碼',
switch: '條件',
logicalOperator: '操作符',
},
footer: {
profile: '“保留所有權利 @ react”',
Expand Down
1 change: 1 addition & 0 deletions web/src/locales/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,7 @@ export default {
port: '端口',
password: '密码',
switch: '条件',
logicalOperator: '操作符',
},
footer: {
profile: 'All rights reserved @ React',
Expand Down
2 changes: 1 addition & 1 deletion web/src/pages/flow/constant.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ export const initialExeSqlValues = {
top_n: 30,
};

export const initialSwitchValues = {};
export const initialSwitchValues = { conditions: [{}] };

export const CategorizeAnchorPointPositions = [
{ top: 1, right: 34 },
Expand Down
141 changes: 139 additions & 2 deletions web/src/pages/flow/switch-form/index.tsx
Original file line number Diff line number Diff line change
@@ -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;

0 comments on commit 982ea49

Please sign in to comment.