From 62b051c56c08a15733aa883cbb35c1166bd3253c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A8=E6=AC=A3?= Date: Thu, 5 Sep 2024 01:03:02 +0800 Subject: [PATCH] refactor: Update AddFlowVariableModal to use buildVariableString from utils/flow --- .../canvas-modal/add-flow-variable-modal.tsx | 17 +++++++++-------- .../flow/canvas-modal/save-flow-modal.tsx | 6 ++---- web/pages/construct/flow/canvas/index.tsx | 8 +++++--- web/types/flow.ts | 7 ++++--- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/web/components/flow/canvas-modal/add-flow-variable-modal.tsx b/web/components/flow/canvas-modal/add-flow-variable-modal.tsx index 5105acb94..5bd2997cb 100644 --- a/web/components/flow/canvas-modal/add-flow-variable-modal.tsx +++ b/web/components/flow/canvas-modal/add-flow-variable-modal.tsx @@ -2,7 +2,7 @@ import { apiInterceptors, getKeys, getVariablesByKey } from '@/client/api'; import { IFlowUpdateParam, IGetKeysResponseData, IVariableItem } from '@/types/flow'; import { buildVariableString } from '@/utils/flow'; import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons'; -import { Button, Cascader, Form, Input, Modal, Select, Space } from 'antd'; +import { Button, Cascader, Form, Input, InputNumber, Modal, Select, Space } from 'antd'; import { uniqBy } from 'lodash'; import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; @@ -19,9 +19,10 @@ interface Option { type Props = { flowInfo?: IFlowUpdateParam; + setFlowInfo: React.Dispatch>; }; -export const AddFlowVariableModal: React.FC = ({ flowInfo }) => { +export const AddFlowVariableModal: React.FC = ({ flowInfo, setFlowInfo }) => { const { t } = useTranslation(); const [isModalOpen, setIsModalOpen] = useState(false); const [form] = Form.useForm(); @@ -48,8 +49,8 @@ export const AddFlowVariableModal: React.FC = ({ flowInfo }) => { }; const onFinish = (values: any) => { - const variables = JSON.stringify(values.parameters); - localStorage.setItem('variables', variables); + const newFlowInfo = { ...flowInfo, variables: values?.parameters || [] } as IFlowUpdateParam; + setFlowInfo(newFlowInfo); setIsModalOpen(false); }; @@ -142,14 +143,14 @@ export const AddFlowVariableModal: React.FC = ({ flowInfo }) => { case 'str': return ; case 'int': - return ; + return ; case 'float': - return ; + return ; case 'bool': return ( ); default: diff --git a/web/components/flow/canvas-modal/save-flow-modal.tsx b/web/components/flow/canvas-modal/save-flow-modal.tsx index 9a710a590..e979989ac 100644 --- a/web/components/flow/canvas-modal/save-flow-modal.tsx +++ b/web/components/flow/canvas-modal/save-flow-modal.tsx @@ -47,8 +47,6 @@ export const SaveFlowModal: React.FC = ({ async function onSaveFlow() { const { name, label, description = '', editable = false, state = 'deployed' } = form.getFieldsValue(); const reactFlowObject = mapHumpToUnderline(reactFlow.toObject() as IFlowData); - const variableValues = localStorage.getItem('variables'); - const variables = JSON.parse(variableValues || '[]'); if (id) { const [, , res] = await apiInterceptors( @@ -60,7 +58,7 @@ export const SaveFlowModal: React.FC = ({ uid: id.toString(), flow_data: reactFlowObject, state, - variables, + variables: flowInfo?.variables, }), ); @@ -78,7 +76,7 @@ export const SaveFlowModal: React.FC = ({ editable, flow_data: reactFlowObject, state, - variables, + variables: flowInfo?.variables, }), ); diff --git a/web/pages/construct/flow/canvas/index.tsx b/web/pages/construct/flow/canvas/index.tsx index c3c91e515..29ecf7698 100644 --- a/web/pages/construct/flow/canvas/index.tsx +++ b/web/pages/construct/flow/canvas/index.tsx @@ -33,12 +33,13 @@ const Canvas: React.FC = () => { const id = searchParams?.get('id') || ''; const reactFlow = useReactFlow(); const [messageApi, contextHolder] = message.useMessage(); + const reactFlowWrapper = useRef(null); - const [loading, setLoading] = useState(false); const [nodes, setNodes, onNodesChange] = useNodesState([]); const [edges, setEdges, onEdgesChange] = useEdgesState([]); - const reactFlowWrapper = useRef(null); + const [flowInfo, setFlowInfo] = useState(); + const [loading, setLoading] = useState(false); const [isSaveFlowModalOpen, setIsSaveFlowModalOpen] = useState(false); const [isExportFlowModalOpen, setIsExportFlowModalOpen] = useState(false); const [isImportModalOpen, setIsImportFlowModalOpen] = useState(false); @@ -53,6 +54,7 @@ const Canvas: React.FC = () => { setEdges(flowData.edges); setLoading(false); } + async function getFlowData() { setLoading(true); const [_, data] = await apiInterceptors(getFlowById(id)); @@ -259,7 +261,7 @@ const Canvas: React.FC = () => { - + diff --git a/web/types/flow.ts b/web/types/flow.ts index d06249a32..0b17ce3b3 100644 --- a/web/types/flow.ts +++ b/web/types/flow.ts @@ -12,7 +12,7 @@ export type IFlowUpdateParam = { uid?: string; flow_data?: IFlowData; state?: FlowState; - variables?: IGetKeysResponseData[]; + variables?: IVariableItem[]; }; export type IFlowRefreshParams = { @@ -170,8 +170,9 @@ export type IFlowDataViewport = { }; export type IFlowData = { - nodes: Array; - edges: Array; + nodes: IFlowDataNode[]; + edges: IFlowDataEdge[]; + variables?: IVariableItem[]; viewport: IFlowDataViewport; };