mirror of
https://github.com/johndoe6345789/AutoMetabuilder.git
synced 2026-04-24 13:54:59 +00:00
- Created custom hooks: useWorkflowGraph, useWorkflowPlugins, usePluginSearch, useTabNavigation - Decomposed canvas logic into: useCanvasNodes, useCanvasEdges, useCanvasDragDrop - Built atomic node components: NodeHeader, NodeBody, NodePorts - Created canvas UI components: CanvasInfoPanel, CanvasHintPanel - Split builder into: LoadingState, ErrorState, WorkflowBuilderHeader, WorkflowBuilderTabs, WorkflowBuilderContent - Added React Flow for n8n-style visual canvas with drag-and-drop - All components now under 100 LOC following PROMPT.md guidelines Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
37 lines
990 B
TypeScript
37 lines
990 B
TypeScript
import { useCallback, useEffect } from "react";
|
|
import { Edge, Connection, addEdge, useEdgesState } from "reactflow";
|
|
import { WorkflowGraph } from "../lib/types";
|
|
|
|
export function useCanvasEdges(
|
|
graph: WorkflowGraph,
|
|
onEdgesChange?: (edges: Edge[]) => void
|
|
) {
|
|
const [edges, setEdges, onEdgesChangeInternal] = useEdgesState([]);
|
|
|
|
useEffect(() => {
|
|
const flowEdges: Edge[] = graph.edges.map((edge, index) => ({
|
|
id: `e-${edge.from}-${edge.to}-${edge.var}-${index}`,
|
|
source: edge.from,
|
|
target: edge.to,
|
|
label: edge.var,
|
|
type: "smoothstep",
|
|
animated: false,
|
|
}));
|
|
|
|
setEdges(flowEdges);
|
|
}, [graph, setEdges]);
|
|
|
|
const onConnect = useCallback(
|
|
(connection: Connection) => {
|
|
setEdges((eds) => addEdge({ ...connection, type: "smoothstep" }, eds));
|
|
},
|
|
[setEdges]
|
|
);
|
|
|
|
useEffect(() => {
|
|
if (onEdgesChange) onEdgesChange(edges);
|
|
}, [edges, onEdgesChange]);
|
|
|
|
return { edges, onConnect, onEdgesChangeInternal };
|
|
}
|