Skip to content

Commit ccad217

Browse files
committed
useNodeManager Hook
1 parent 49aea78 commit ccad217

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed

src/hooks/useNodeManager.ts

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
import { useCallback, useMemo } from "react";
2+
3+
import type { NodeType } from "@/nodeManager";
4+
import { useComponentSpec } from "@/providers/ComponentSpecProvider";
5+
6+
export const useNodeManager = () => {
7+
const { nodeManager } = useComponentSpec();
8+
9+
// Core NodeManager operations
10+
const getStableNodeId = useCallback(
11+
(taskId: string, nodeType: NodeType): string => {
12+
return nodeManager.getNodeId(taskId, nodeType);
13+
},
14+
[nodeManager],
15+
);
16+
17+
const getTaskIdFromNodeId = useCallback(
18+
(nodeId: string): string | undefined => {
19+
return nodeManager.getTaskId(nodeId);
20+
},
21+
[nodeManager],
22+
);
23+
24+
const updateTaskId = useCallback(
25+
(oldTaskId: string, newTaskId: string): void => {
26+
nodeManager.updateTaskId(oldTaskId, newTaskId);
27+
},
28+
[nodeManager],
29+
);
30+
31+
const removeNode = useCallback(
32+
(taskId: string): void => {
33+
nodeManager.removeNode(taskId);
34+
},
35+
[nodeManager],
36+
);
37+
38+
const isManaged = useCallback(
39+
(nodeId: string): boolean => {
40+
return nodeManager.isManaged(nodeId);
41+
},
42+
[nodeManager],
43+
);
44+
45+
const getNodeType = useCallback(
46+
(nodeId: string): NodeType | undefined => {
47+
return nodeManager.getNodeType(nodeId);
48+
},
49+
[nodeManager],
50+
);
51+
52+
// Input/Output specific utilities
53+
const getInputNodeId = useCallback(
54+
(inputName: string): string => {
55+
return nodeManager.getNodeId(inputName, "input");
56+
},
57+
[nodeManager],
58+
);
59+
60+
const getOutputNodeId = useCallback(
61+
(outputName: string): string => {
62+
return nodeManager.getNodeId(outputName, "output");
63+
},
64+
[nodeManager],
65+
);
66+
67+
const getTaskNodeId = useCallback(
68+
(taskId: string): string => {
69+
return nodeManager.getNodeId(taskId, "task");
70+
},
71+
[nodeManager],
72+
);
73+
74+
const getTaskInputNodeId = useCallback(
75+
(taskId: string, inputName: string): string => {
76+
return nodeManager.getTaskHandleNodeId(taskId, inputName, "taskInput");
77+
},
78+
[nodeManager],
79+
);
80+
81+
const getTaskOutputNodeId = useCallback(
82+
(taskId: string, outputName: string): string => {
83+
return nodeManager.getTaskHandleNodeId(taskId, outputName, "taskOutput");
84+
},
85+
[nodeManager],
86+
);
87+
88+
// Helper to get handle info from node ID
89+
const getHandleInfo = useCallback(
90+
(nodeId: string): { taskId: string; handleName: string } | undefined => {
91+
return nodeManager.getHandleInfo(nodeId);
92+
},
93+
[nodeManager],
94+
);
95+
96+
// Return all utilities as a stable object
97+
return useMemo(
98+
() => ({
99+
// Core operations
100+
getStableNodeId,
101+
getTaskIdFromNodeId,
102+
updateTaskId,
103+
removeNode,
104+
isManaged,
105+
getNodeType,
106+
107+
// Specific node type utilities
108+
getInputNodeId,
109+
getOutputNodeId,
110+
getTaskNodeId,
111+
getTaskInputNodeId,
112+
getTaskOutputNodeId,
113+
getHandleInfo,
114+
115+
// Direct access to NodeManager for advanced use cases
116+
nodeManager,
117+
}),
118+
[
119+
getStableNodeId,
120+
getTaskIdFromNodeId,
121+
updateTaskId,
122+
removeNode,
123+
isManaged,
124+
getNodeType,
125+
getInputNodeId,
126+
getOutputNodeId,
127+
getTaskNodeId,
128+
getTaskInputNodeId,
129+
getTaskOutputNodeId,
130+
getHandleInfo,
131+
nodeManager,
132+
],
133+
);
134+
};

0 commit comments

Comments
 (0)