diff --git a/web/components/flow/node-param-handler.tsx b/web/components/flow/node-param-handler.tsx index c617369cf..efa3cc67a 100644 --- a/web/components/flow/node-param-handler.tsx +++ b/web/components/flow/node-param-handler.tsx @@ -4,6 +4,7 @@ import React from 'react'; import RequiredIcon from './required-icon'; import NodeHandler from './node-handler'; import { InfoCircleOutlined } from '@ant-design/icons'; +import { RenderSelect, RenderCascader } from './node-renderer'; interface NodeParamHandlerProps { node: IFlowNode; @@ -14,14 +15,14 @@ interface NodeParamHandlerProps { // render node parameters item const NodeParamHandler: React.FC = ({ node, data, label, index }) => { - function handleChange(value: any) { + function onChange(value: any) { data.value = value; } - if (data.category === 'resource') { - return ; - } else if (data.category === 'common') { + // render node parameters based on AWEL1.0 + function renderNodeWithoutUiParam(data: IFlowNodeParameter) { let defaultValue = data.value !== null && data.value !== undefined ? data.value : data.default; + switch (data.type_name) { case 'int': case 'float': @@ -39,7 +40,7 @@ const NodeParamHandler: React.FC = ({ node, data, label, className="w-full" defaultValue={defaultValue} onChange={(value: number | null) => { - handleChange(value); + onChange(value); }} /> @@ -60,20 +61,20 @@ const NodeParamHandler: React.FC = ({ node, data, label, className="w-full nodrag" defaultValue={defaultValue} options={data.options.map((item: any) => ({ label: item.label, value: item.value }))} - onChange={handleChange} + onChange={onChange} /> ) : ( { - handleChange(e.target.value); + onChange(e.target.value); }} /> )} ); - case 'bool': + case 'checkbox': defaultValue = defaultValue === 'False' ? false : defaultValue; defaultValue = defaultValue === 'True' ? true : defaultValue; return ( @@ -89,7 +90,7 @@ const NodeParamHandler: React.FC = ({ node, data, label, className="ml-2" defaultChecked={defaultValue} onChange={(e) => { - handleChange(e.target.checked); + onChange(e.target.checked); }} />

@@ -97,6 +98,23 @@ const NodeParamHandler: React.FC = ({ node, data, label, ); } } + + // render node parameters based on AWEL2.0 + function renderNodeWithUiParam(data: IFlowNodeParameter) { + let defaultValue = data.value !== null && data.value !== undefined ? data.value : data.default; + + // TODO: 根据ui_type渲染不同的组件 + switch (data?.ui?.ui_type) { + case 'select': + return ; + } + } + + if (data.category === 'resource') { + return ; + } else if (data.category === 'common') { + return data?.ui ? renderNodeWithUiParam(data) : renderNodeWithoutUiParam(data); + } }; export default NodeParamHandler; diff --git a/web/components/flow/node-renderer/cascader.tsx b/web/components/flow/node-renderer/cascader.tsx new file mode 100644 index 000000000..605105a93 --- /dev/null +++ b/web/components/flow/node-renderer/cascader.tsx @@ -0,0 +1,3 @@ +import { IFlowNodeParameter } from '@/types/flow'; + +export const RenderCascader = (props: IFlowNodeParameter) => {}; diff --git a/web/components/flow/node-renderer/index.ts b/web/components/flow/node-renderer/index.ts new file mode 100644 index 000000000..d9d116497 --- /dev/null +++ b/web/components/flow/node-renderer/index.ts @@ -0,0 +1,2 @@ +export * from "./select"; +export * from "./cascader"; \ No newline at end of file diff --git a/web/components/flow/node-renderer/select.tsx b/web/components/flow/node-renderer/select.tsx new file mode 100644 index 000000000..897d18522 --- /dev/null +++ b/web/components/flow/node-renderer/select.tsx @@ -0,0 +1,21 @@ +import { IFlowNodeParameter } from "@/types/flow"; +import { Select } from "antd"; + +type SelectProps = { + data: IFlowNodeParameter; + defaultValue: any; + onChange: (value: any) => void; +} + +export const RenderSelect = (params: SelectProps) => { + const { data, defaultValue, onChange } = params; + + return data.options?.length > 0 && ( +