diff --git a/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx b/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx index 2ae4b59ac5af9229da20190ab299acbcacd5229d..b4635812a18286ba743a3b782ea59fc9a9ef7c1b 100644 --- a/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx +++ b/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx @@ -10,7 +10,7 @@ import { useReactFlow, } from '@xyflow/react'; import { PlusCircleIcon } from 'lucide-react'; -import { useEffect } from 'react'; +import { useCallback, useEffect } from 'react'; import CustomNode from './CustomNode'; import * as chatAPI from '../../../lib/transformerlab-api-sdk'; import { mutate } from 'swr'; @@ -121,12 +121,31 @@ const Flow = ({ return () => clearTimeout(timer); }, [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, + // }) + // ); + // } + }, []); + return ( <ReactFlow nodes={nodes} edges={edges} onNodesChange={onNodesChange} onEdgesChange={onEdgesChange} + onNodeDragStop={onNodeDragStop} nodeTypes={nodeTypes} fitView zoomOnScroll={false} diff --git a/src/renderer/lib/transformerlab-api-sdk.ts b/src/renderer/lib/transformerlab-api-sdk.ts index 2ca6ce5251ee50d97e1d29aa590d025570df03aa..ac7f32444c340e3f52bd644067096d132886d442 100644 --- a/src/renderer/lib/transformerlab-api-sdk.ts +++ b/src/renderer/lib/transformerlab-api-sdk.ts @@ -1033,6 +1033,15 @@ Endpoints.Workflows = { workflowId + '&node_id=' + nodeId, + UpdateNode: (workflowId: string, nodeId: string, node: string) => + API_URL() + + 'workflows/update_node' + + '?workflow_id=' + + workflowId + + '&node_id=' + + nodeId + + '&node=' + + node, RunWorkflow: (workflowId: string) => API_URL() + 'workflows/start/' + workflowId, };