diff --git a/web/components/flow/add-flow-variable.tsx b/web/components/flow/add-flow-variable.tsx index 808fd50f4..e27d484a5 100644 --- a/web/components/flow/add-flow-variable.tsx +++ b/web/components/flow/add-flow-variable.tsx @@ -1,78 +1,115 @@ -import { apiInterceptors, getFlowNodes } from '@/client/api'; -import { IFlowNode } from '@/types/flow'; -import { FLOW_NODES_KEY } from '@/utils'; +// import { IFlowNode } from '@/types/flow'; import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons'; -import { Button, Form, Input, Modal } from 'antd'; -import React, { useEffect, useState } from 'react'; +import { Button, Form, Input, Modal, Select, Space } from 'antd'; +import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; -type GroupType = { category: string; categoryLabel: string; nodes: IFlowNode[] }; +// ype GroupType = { category: string; categoryLabel: string; nodes: IFlowNode[] }; +type ValueType = 'str' | 'int' | 'float' | 'bool' | 'ref'; + +const { Option } = Select; + +const DAG_PARAM_KEY = 'dbgpt.core.flow.params'; +const DAG_PARAM_SCOPE = 'flow_priv'; const AddFlowVariable: React.FC = () => { const { t } = useTranslation(); - const [operators, setOperators] = useState>([]); - const [resources, setResources] = useState>([]); - const [operatorsGroup, setOperatorsGroup] = useState([]); - const [resourcesGroup, setResourcesGroup] = useState([]); + // const [operators, setOperators] = useState>([]); + // const [resources, setResources] = useState>([]); + // const [operatorsGroup, setOperatorsGroup] = useState([]); + // const [resourcesGroup, setResourcesGroup] = useState([]); const [isModalOpen, setIsModalOpen] = useState(false); + const [form] = Form.useForm(); // const [form] = Form.useForm(); const showModal = () => { setIsModalOpen(true); }; - useEffect(() => { - getNodes(); - }, []); - - async function getNodes() { - const [_, data] = await apiInterceptors(getFlowNodes()); - if (data && data.length > 0) { - localStorage.setItem(FLOW_NODES_KEY, JSON.stringify(data)); - const operatorNodes = data.filter(node => node.flow_type === 'operator'); - const resourceNodes = data.filter(node => node.flow_type === 'resource'); - setOperators(operatorNodes); - setResources(resourceNodes); - setOperatorsGroup(groupNodes(operatorNodes)); - setResourcesGroup(groupNodes(resourceNodes)); - } - } + // TODO: get keys + // useEffect(() => { + // getNodes(); + // }, []); - function groupNodes(data: IFlowNode[]) { - const groups: GroupType[] = []; - const categoryMap: Record = {}; - data.forEach(item => { - const { category, category_label } = item; - if (!categoryMap[category]) { - categoryMap[category] = { category, categoryLabel: category_label, nodes: [] }; - groups.push(categoryMap[category]); - } - categoryMap[category].nodes.push(item); - }); - return groups; - } + // async function getNodes() { + // const [_, data] = await apiInterceptors(getFlowNodes()); + // if (data && data.length > 0) { + // localStorage.setItem(FLOW_NODES_KEY, JSON.stringify(data)); + // const operatorNodes = data.filter(node => node.flow_type === 'operator'); + // const resourceNodes = data.filter(node => node.flow_type === 'resource'); + // setOperators(operatorNodes); + // setResources(resourceNodes); + // setOperatorsGroup(groupNodes(operatorNodes)); + // setResourcesGroup(groupNodes(resourceNodes)); + // } + // } - const formItemLayout = { - labelCol: { - xs: { span: 24 }, - sm: { span: 4 }, - }, - wrapperCol: { - xs: { span: 24 }, - sm: { span: 20 }, - }, - }; - - const formItemLayoutWithOutLabel = { - wrapperCol: { - xs: { span: 24, offset: 0 }, - sm: { span: 20, offset: 2 }, - }, - }; + // function groupNodes(data: IFlowNode[]) { + // const groups: GroupType[] = []; + // const categoryMap: Record = {}; + // data.forEach(item => { + // const { category, category_label } = item; + // if (!categoryMap[category]) { + // categoryMap[category] = { category, categoryLabel: category_label, nodes: [] }; + // groups.push(categoryMap[category]); + // } + // categoryMap[category].nodes.push(item); + // }); + // return groups; + // } const onFinish = (values: any) => { console.log('Received values of form:', values); }; + function onNameChange(e: React.ChangeEvent, index: number) { + const name = e.target.value; + + const result = name + ?.split('_') + ?.map(word => word.charAt(0).toUpperCase() + word.slice(1)) + ?.join(' '); + + form.setFields([ + { + name: ['parameters', index, 'label'], + value: result, + }, + ]); + + // change value to ref + const type = form.getFieldValue(['parameters', index, 'value_type']); + + if (type === 'ref') { + const parameters = form.getFieldValue('parameters'); + const param = parameters?.[index]; + + if (param) { + const { name = '' } = param; + param.value = `${DAG_PARAM_KEY}:${name}@scope:${DAG_PARAM_SCOPE}`; + + form.setFieldsValue({ + parameters: [...parameters], + }); + } + } + } + + function onValueTypeChange(type: ValueType, index: number) { + if (type === 'ref') { + const parameters = form.getFieldValue('parameters'); + const param = parameters?.[index]; + + if (param) { + const { name = '' } = param; + param.value = `${DAG_PARAM_KEY}:${name}@scope:${DAG_PARAM_SCOPE}`; + + form.setFieldsValue({ + parameters: [...parameters], + }); + } + } + } + return ( <> - - )} - - - + + + + + diff --git a/web/components/flow/canvas-modal/export-flow-modal.tsx b/web/components/flow/canvas-modal/export-flow-modal.tsx index 31850dc56..0d056abac 100644 --- a/web/components/flow/canvas-modal/export-flow-modal.tsx +++ b/web/components/flow/canvas-modal/export-flow-modal.tsx @@ -43,7 +43,6 @@ export const ExportFlowModal: React.FC = ({ return ( <> setIsExportFlowModalOpen(false)} diff --git a/web/components/flow/canvas-modal/import-flow-modal.tsx b/web/components/flow/canvas-modal/import-flow-modal.tsx index fbf7e87df..803f37d92 100644 --- a/web/components/flow/canvas-modal/import-flow-modal.tsx +++ b/web/components/flow/canvas-modal/import-flow-modal.tsx @@ -61,7 +61,6 @@ export const ImportFlowModal: React.FC = ({ isImportModalOpen, setIsImpor return ( <> setIsImportFlowModalOpen(false)} diff --git a/web/components/flow/canvas-modal/save-flow-modal.tsx b/web/components/flow/canvas-modal/save-flow-modal.tsx index 64faac882..708f6f768 100644 --- a/web/components/flow/canvas-modal/save-flow-modal.tsx +++ b/web/components/flow/canvas-modal/save-flow-modal.tsx @@ -89,7 +89,6 @@ export const SaveFlowModal: React.FC = ({ return ( <> { @@ -142,7 +141,7 @@ export const SaveFlowModal: React.FC = ({