### What problem does this PR solve? Feat: Limit the iteration start node to only be the source node #4242 ### Type of change - [x] New Feature (non-breaking change which adds functionality)tags/nightly
| @@ -1093,6 +1093,9 @@ This delimiter is used to split the input text into several text pieces echo of | |||
| minus: 'Minus', | |||
| semicolon: 'Semicolon', | |||
| }, | |||
| addVariable: 'Add variable', | |||
| variableSettings: 'Variable settings', | |||
| globalVariables: 'Global variables', | |||
| }, | |||
| footer: { | |||
| profile: 'All rights reserved @ React', | |||
| @@ -1030,6 +1030,8 @@ export default { | |||
| minus: '減號', | |||
| semicolon: '分號', | |||
| }, | |||
| addVariable: '新增變數', | |||
| variableSettings: '變數設定', | |||
| }, | |||
| footer: { | |||
| profile: '“保留所有權利 @ react”', | |||
| @@ -1074,6 +1074,8 @@ export default { | |||
| minus: '减号', | |||
| semicolon: '分号', | |||
| }, | |||
| addVariable: '新增变量', | |||
| variableSettings: '变量设置', | |||
| }, | |||
| footer: { | |||
| profile: 'All rights reserved @ React', | |||
| @@ -44,8 +44,6 @@ export function ButtonEdge({ | |||
| }; | |||
| // highlight the nodes that the workflow passes through | |||
| // const queryClient = useQueryClient(); | |||
| // const flowDetail = queryClient.getQueryData<IFlow>(['flowDetail']); | |||
| const { data: flowDetail } = useFetchFlow(); | |||
| const graphPath = useMemo(() => { | |||
| @@ -109,6 +109,7 @@ export function IterationStartNode({ | |||
| isConnectable={isConnectable} | |||
| className={styles.handle} | |||
| style={RightHandleStyle} | |||
| isConnectableEnd={false} | |||
| ></Handle> | |||
| <div> | |||
| <ListRestart className="size-7" /> | |||
| @@ -3,6 +3,7 @@ import { IModalProps } from '@/interfaces/common'; | |||
| import { Form, Input, Modal, Select, Switch } from 'antd'; | |||
| import { DefaultOptionType } from 'antd/es/select'; | |||
| import { useEffect, useMemo } from 'react'; | |||
| import { useTranslation } from 'react-i18next'; | |||
| import { BeginQueryType, BeginQueryTypeIconMap } from '../../constant'; | |||
| import { BeginQuery } from '../../interface'; | |||
| import BeginDynamicOptions from './begin-dynamic-options'; | |||
| @@ -16,6 +17,7 @@ export const ModalForm = ({ | |||
| initialValue: BeginQuery; | |||
| otherThanCurrentQuery: BeginQuery[]; | |||
| }) => { | |||
| const { t } = useTranslation(); | |||
| const [form] = Form.useForm(); | |||
| const options = useMemo(() => { | |||
| return Object.values(BeginQueryType).reduce<DefaultOptionType[]>( | |||
| @@ -56,7 +58,7 @@ export const ModalForm = ({ | |||
| return ( | |||
| <Modal | |||
| title="Begin query" | |||
| title={t('flow.variableSettings')} | |||
| open={visible} | |||
| onOk={onOk} | |||
| onCancel={hideModal} | |||
| @@ -91,7 +91,7 @@ const DynamicVariableForm = ({ node }: IProps) => { | |||
| icon={<PlusOutlined />} | |||
| className={styles.addButton} | |||
| > | |||
| {t('flow.addItem')} | |||
| {t('flow.addVariable')} | |||
| </Button> | |||
| </Form.Item> | |||
| </> | |||