From 2ee2a83b8d47988a0f3eb1f850adafab405962c7 Mon Sep 17 00:00:00 2001 From: Camiel van Schoonhoven Date: Tue, 7 Oct 2025 16:06:16 -0700 Subject: [PATCH 1/2] useNodeManager Hook From 55384a0c83dc3ffa1e7724d8e5ecb98a61470850 Mon Sep 17 00:00:00 2001 From: Camiel van Schoonhoven Date: Thu, 23 Oct 2025 13:11:22 -0700 Subject: [PATCH 2/2] Add useNodeManager Hook --- src/hooks/useNodeManager.ts | 126 ++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 src/hooks/useNodeManager.ts diff --git a/src/hooks/useNodeManager.ts b/src/hooks/useNodeManager.ts new file mode 100644 index 000000000..699fecaa5 --- /dev/null +++ b/src/hooks/useNodeManager.ts @@ -0,0 +1,126 @@ +import { useCallback, useMemo } from "react"; + +import type { HandleInfo, NodeType } from "@/nodeManager"; +import { useComponentSpec } from "@/providers/ComponentSpecProvider"; + +export const useNodeManager = () => { + const { nodeManager } = useComponentSpec(); + + // Get node ID utilities + const getNodeId = useCallback( + (refId: string, type: NodeType): string => { + return nodeManager.getNodeId(refId, type); + }, + [nodeManager], + ); + + const getHandleNodeId = useCallback( + ( + refId: string, + handleName: string, + handleType: "handle-in" | "handle-out", + ): string => { + return nodeManager.getHandleNodeId(refId, handleName, handleType); + }, + [nodeManager], + ); + + const getTaskNodeId = useCallback( + (taskId: string): string => { + return nodeManager.getNodeId(taskId, "task"); + }, + [nodeManager], + ); + + const getInputNodeId = useCallback( + (inputId: string): string => { + return nodeManager.getNodeId(inputId, "input"); + }, + [nodeManager], + ); + + const getOutputNodeId = useCallback( + (outputId: string): string => { + return nodeManager.getNodeId(outputId, "output"); + }, + [nodeManager], + ); + + const getInputHandleNodeId = useCallback( + (refId: string, inputName: string): string => { + return nodeManager.getHandleNodeId(refId, inputName, "handle-in"); + }, + [nodeManager], + ); + + const getOutputHandleNodeId = useCallback( + (refId: string, outputName: string): string => { + return nodeManager.getHandleNodeId(refId, outputName, "handle-out"); + }, + [nodeManager], + ); + + // Get task ID from node ID + const getRefId = useCallback( + (nodeId: string): string | undefined => { + return nodeManager.getRefId(nodeId); + }, + [nodeManager], + ); + + // Core NodeManager operations + const updateRefId = useCallback( + (oldRefId: string, newRefId: string): void => { + nodeManager.updateRefId(oldRefId, newRefId); + }, + [nodeManager], + ); + + const getNodeType = useCallback( + (nodeId: string): NodeType | undefined => { + return nodeManager.getNodeType(nodeId); + }, + [nodeManager], + ); + + const getHandleInfo = useCallback( + (nodeId: string): HandleInfo | undefined => { + return nodeManager.getHandleInfo(nodeId); + }, + [nodeManager], + ); + + return useMemo( + () => ({ + // Core operations + getNodeId, + getHandleNodeId, + getHandleInfo, + getNodeType, + getRefId, + updateRefId, + // Specific getters + getInputNodeId, + getOutputNodeId, + getTaskNodeId, + getInputHandleNodeId, + getOutputHandleNodeId, + // NodeManager instance + nodeManager, + }), + [ + getNodeId, + getHandleNodeId, + getHandleInfo, + getNodeType, + getRefId, + updateRefId, + getInputNodeId, + getOutputNodeId, + getTaskNodeId, + getInputHandleNodeId, + getOutputHandleNodeId, + nodeManager, + ], + ); +};