From 0a432c6d65c03733c2f45844ab4b2c6f108b4ad4 Mon Sep 17 00:00:00 2001 From: ali asaria <aliasaria@users.noreply.github.com> Date: Thu, 27 Feb 2025 16:34:02 -0500 Subject: [PATCH] allow moving nodes and saving their position --- .../Experiment/Workflows/WorkflowCanvas.tsx | 35 ++++++++++--------- src/renderer/lib/transformerlab-api-sdk.ts | 8 +++++ 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx b/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx index 217f804c..40893f61 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 ac7f3244..8fb4c663 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, }; -- GitLab