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>
39 lines
847 B
TypeScript
39 lines
847 B
TypeScript
import { useEffect, useState } from "react";
|
|
import { fetchWorkflowPlugins } from "../lib/api";
|
|
import { WorkflowPluginMap } from "../lib/types";
|
|
|
|
export function useWorkflowPlugins() {
|
|
const [plugins, setPlugins] = useState<WorkflowPluginMap>({});
|
|
const [loading, setLoading] = useState(true);
|
|
const [error, setError] = useState<string>("");
|
|
|
|
useEffect(() => {
|
|
let alive = true;
|
|
setLoading(true);
|
|
|
|
fetchWorkflowPlugins()
|
|
.then((data) => {
|
|
if (alive) {
|
|
setPlugins(data);
|
|
setError("");
|
|
}
|
|
})
|
|
.catch((err) => {
|
|
if (alive) {
|
|
setError(String(err));
|
|
}
|
|
})
|
|
.finally(() => {
|
|
if (alive) {
|
|
setLoading(false);
|
|
}
|
|
});
|
|
|
|
return () => {
|
|
alive = false;
|
|
};
|
|
}, []);
|
|
|
|
return { plugins, loading, error };
|
|
}
|