diff --git a/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx b/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx index 217f804c41861b913673a20c7292e7204636e7c3..40893f61fcc2d34d665f217baadc29b16dba7bf4 100644 --- a/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx +++ b/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx @@ -13,7 +13,6 @@ import { PlusCircleIcon } from 'lucide-react'; import { useCallback, useEffect } from 'react'; import CustomNode from './CustomNode'; import * as chatAPI from '../../../lib/transformerlab-api-sdk'; -import { mutate } from 'swr'; const nodeTypes = { customNode: CustomNode }; @@ -55,10 +54,13 @@ function generateNodes(workflow: any): any[] { template: node.template, metadata: node?.metadata, }; + + const savedPosition = node?.metadata?.position || { x: 0, y: position }; + const nextNode = { id: node.id, type: 'customNode', - position: { x: 0, y: position }, + position: savedPosition, data: data, }; out.push(nextNode); @@ -97,6 +99,9 @@ function generateEdges(workflow: any) { for (let i = 0; i < workflowConfig.nodes.length; i++) { const currentNode = workflowConfig.nodes[i]; + if (!Array.isArray(currentNode.out)) { + continue; + } currentNode.out.forEach((nextId) => { out.push({ id: currentNode.id + nextId, @@ -150,21 +155,17 @@ const Flow = ({ }, [reactFlowInstance, selectedWorkflow]); const onNodeDragStop = useCallback(async (event, node) => { - // Save all current node positions - const allCurrentPositions = nodes.map((n) => ({ - id: n.id, - position: n.position, - })); - - // Save to your backend or storage - // for (const node of allCurrentPositions) { - // console.log('update node: ' + node?.id); - // await fetch( - // chatAPI.Endpoints.Workflows.UpdateNode(workflowId, node?.id, { - // position: node.position, - // }) - // ); - // } + const metadata = JSON.stringify({ + position: node.position, + }); + await fetch( + chatAPI.Endpoints.Workflows.EditNodeMetadata( + workflowId, + node?.id, + metadata + ) + ); + mutateWorkflows(); }, []); return ( diff --git a/src/renderer/lib/transformerlab-api-sdk.ts b/src/renderer/lib/transformerlab-api-sdk.ts index ac7f32444c340e3f52bd644067096d132886d442..8fb4c6633db8e7510186b7021c77307dffdb5a9b 100644 --- a/src/renderer/lib/transformerlab-api-sdk.ts +++ b/src/renderer/lib/transformerlab-api-sdk.ts @@ -1042,6 +1042,14 @@ Endpoints.Workflows = { nodeId + '&node=' + node, + EditNodeMetadata: (workflowId: string, nodeId: string, metadata: string) => + API_URL() + + 'workflows/edit_node_metadata/' + + workflowId + + '?node_id=' + + nodeId + + '&metadata=' + + metadata, RunWorkflow: (workflowId: string) => API_URL() + 'workflows/start/' + workflowId, };