diff --git a/web/src/views/Workflow/components/Properties/hooks/useVariableList.ts b/web/src/views/Workflow/components/Properties/hooks/useVariableList.ts index 4dca4854..779174ff 100644 --- a/web/src/views/Workflow/components/Properties/hooks/useVariableList.ts +++ b/web/src/views/Workflow/components/Properties/hooks/useVariableList.ts @@ -35,7 +35,8 @@ const NODE_VARIABLES = { ], 'http-request': [ { label: 'body', dataType: 'string', field: 'body' }, - { label: 'status_code', dataType: 'number', field: 'status_code' } + { label: 'status_code', dataType: 'number', field: 'status_code' }, + { label: 'headers', dataType: 'object', field: 'headers' }, ], 'question-classifier': [{ label: 'class_name', dataType: 'string', field: 'class_name' }], 'memory-read': [ @@ -390,11 +391,6 @@ export const useVariableList = ( addVariable(list, keys, `${pid}_item`, 'item', itemType, `${pid}.item`, pd); addVariable(list, keys, `${pid}_index`, 'index', 'number', `${pid}.index`, pd); } else if (pd.type === 'iteration' && !pd.config.input.defaultValue) { - let itemType = 'object'; - const iv = list.find(v => `{{${v.value}}}` === pd.config.input.defaultValue); - if (iv?.dataType.startsWith('array[')) { - itemType = iv.dataType.replace(/^array\[(.+)\]$/, '$1'); - } addVariable(list, keys, `${pid}_item`, 'item', 'string', `${pid}.item`, pd); addVariable(list, keys, `${pid}_index`, 'index', 'number', `${pid}.index`, pd); } diff --git a/web/src/views/Workflow/components/Properties/index.tsx b/web/src/views/Workflow/components/Properties/index.tsx index 76fc9ad0..bd5392cd 100644 --- a/web/src/views/Workflow/components/Properties/index.tsx +++ b/web/src/views/Workflow/components/Properties/index.tsx @@ -95,7 +95,7 @@ const Properties: FC = ({ initialValue[key] = config[key].defaultValue } }) - + form.setFieldsValue({ type, id: selectedNode.id, @@ -114,16 +114,16 @@ const Properties: FC = ({ */ const updateNodeLabel = (newLabel: string) => { if (selectedNode && form) { - const nodeData = selectedNode.data as NodeProperties; + const nodeData = selectedNode.getData() as NodeProperties; selectedNode.setAttrByPath('text/text', `${nodeData.icon} ${newLabel}`); - selectedNode.setData({ ...selectedNode.data, name: newLabel }); + selectedNode.setData({ ...selectedNode.getData(), name: newLabel }); } }; useEffect(() => { if (values && selectedNode) { const { id, knowledge_retrieval, group, group_variables, ...rest } = values - const { knowledge_bases = [], ...restKnowledgeConfig } = (knowledge_retrieval as any) || {} + const { knowledge_bases = [], name: _name, description: _description, ...restKnowledgeConfig } = (knowledge_retrieval as any) || {} let allRest = { ...rest, @@ -136,21 +136,23 @@ const Properties: FC = ({ })) } + const nodeData = selectedNode.getData() + Object.keys(values).forEach(key => { - if (selectedNode.data?.config?.[key]) { + if (nodeData?.config?.[key]) { // Create a deep copy to avoid reference sharing between nodes - if (!selectedNode.data.config[key]) { - selectedNode.data.config[key] = {}; + if (!nodeData.config[key]) { + nodeData.config[key] = {}; } - selectedNode.data.config[key] = { - ...selectedNode.data.config[key], + nodeData.config[key] = { + ...nodeData.config[key], defaultValue: values[key] }; } }) selectedNode?.setData({ - ...selectedNode.data, + ...nodeData, ...allRest, }) }