| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- import { RAGFlowNodeType } from '@/interfaces/database/flow';
 - import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
 - import { Button, Collapse, Flex, Form, Input, Select } from 'antd';
 - import { PropsWithChildren, useCallback } from 'react';
 - import { useTranslation } from 'react-i18next';
 - import { useBuildComponentIdSelectOptions } from '../../hooks/use-get-begin-query';
 - 
 - import styles from './index.less';
 - 
 - interface IProps {
 -   node?: RAGFlowNodeType;
 - }
 - 
 - enum VariableType {
 -   Reference = 'reference',
 -   Input = 'input',
 - }
 - 
 - const getVariableName = (type: string) =>
 -   type === VariableType.Reference ? 'component_id' : 'value';
 - 
 - const DynamicVariableForm = ({ node }: IProps) => {
 -   const { t } = useTranslation();
 -   const valueOptions = useBuildComponentIdSelectOptions(
 -     node?.id,
 -     node?.parentId,
 -   );
 -   const form = Form.useFormInstance();
 - 
 -   const options = [
 -     { value: VariableType.Reference, label: t('flow.reference') },
 -     { value: VariableType.Input, label: t('flow.text') },
 -   ];
 - 
 -   const handleTypeChange = useCallback(
 -     (name: number) => () => {
 -       setTimeout(() => {
 -         form.setFieldValue(['query', name, 'component_id'], undefined);
 -         form.setFieldValue(['query', name, 'value'], undefined);
 -       }, 0);
 -     },
 -     [form],
 -   );
 - 
 -   return (
 -     <Form.List name="query">
 -       {(fields, { add, remove }) => (
 -         <>
 -           {fields.map(({ key, name, ...restField }) => (
 -             <Flex key={key} gap={10} align={'baseline'}>
 -               <Form.Item
 -                 {...restField}
 -                 name={[name, 'type']}
 -                 className={styles.variableType}
 -               >
 -                 <Select
 -                   options={options}
 -                   onChange={handleTypeChange(name)}
 -                 ></Select>
 -               </Form.Item>
 -               <Form.Item noStyle dependencies={[name, 'type']}>
 -                 {({ getFieldValue }) => {
 -                   const type = getFieldValue(['query', name, 'type']);
 -                   return (
 -                     <Form.Item
 -                       {...restField}
 -                       name={[name, getVariableName(type)]}
 -                       className={styles.variableValue}
 -                     >
 -                       {type === VariableType.Reference ? (
 -                         <Select
 -                           placeholder={t('common.pleaseSelect')}
 -                           options={valueOptions}
 -                         ></Select>
 -                       ) : (
 -                         <Input placeholder={t('common.pleaseInput')} />
 -                       )}
 -                     </Form.Item>
 -                   );
 -                 }}
 -               </Form.Item>
 -               <MinusCircleOutlined onClick={() => remove(name)} />
 -             </Flex>
 -           ))}
 -           <Form.Item>
 -             <Button
 -               type="dashed"
 -               onClick={() => add({ type: VariableType.Reference })}
 -               block
 -               icon={<PlusOutlined />}
 -               className={styles.addButton}
 -             >
 -               {t('flow.addVariable')}
 -             </Button>
 -           </Form.Item>
 -         </>
 -       )}
 -     </Form.List>
 -   );
 - };
 - 
 - export function FormCollapse({
 -   children,
 -   title,
 - }: PropsWithChildren<{ title: string }>) {
 -   return (
 -     <Collapse
 -       className={styles.dynamicInputVariable}
 -       defaultActiveKey={['1']}
 -       items={[
 -         {
 -           key: '1',
 -           label: <span className={styles.title}>{title}</span>,
 -           children,
 -         },
 -       ]}
 -     />
 -   );
 - }
 - 
 - const DynamicInputVariable = ({ node }: IProps) => {
 -   const { t } = useTranslation();
 -   return (
 -     <FormCollapse title={t('flow.input')}>
 -       <DynamicVariableForm node={node}></DynamicVariableForm>
 -     </FormCollapse>
 -   );
 - };
 - 
 - export default DynamicInputVariable;
 
 
  |