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>
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { useCallback } from "react";
|
|
import { Node, Edge } from "reactflow";
|
|
import { WorkflowGraph, WorkflowPluginMap } from "../../lib/types";
|
|
import { useCanvasNodes } from "./useCanvasNodes";
|
|
import { useCanvasEdges } from "./useCanvasEdges";
|
|
import { useCanvasDragDrop } from "./useCanvasDragDrop";
|
|
|
|
export function useWorkflowCanvas(
|
|
graph: WorkflowGraph,
|
|
plugins: WorkflowPluginMap,
|
|
t: (key: string, fallback?: string) => string,
|
|
onNodesChange?: (nodes: Node[]) => void,
|
|
onEdgesChange?: (edges: Edge[]) => void
|
|
) {
|
|
const { nodes, setNodes, onNodesChangeInternal } = useCanvasNodes(
|
|
graph,
|
|
plugins,
|
|
t,
|
|
onNodesChange
|
|
);
|
|
|
|
const { edges, onConnect, onEdgesChangeInternal } = useCanvasEdges(graph, onEdgesChange);
|
|
|
|
const handleNodeAdd = useCallback(
|
|
(node: Node) => {
|
|
setNodes((nds) => nds.concat(node));
|
|
},
|
|
[setNodes]
|
|
);
|
|
|
|
const { onDragOver, onDrop, reactFlowWrapper } = useCanvasDragDrop(plugins, t, handleNodeAdd);
|
|
|
|
return {
|
|
nodes,
|
|
edges,
|
|
onNodesChangeInternal,
|
|
onEdgesChangeInternal,
|
|
onConnect,
|
|
onDragOver,
|
|
onDrop,
|
|
reactFlowWrapper,
|
|
};
|
|
}
|