MCPcopy Create free account
hub / github.com/code-with-antonio/nodebase / NodeSelector

Function NodeSelector

src/components/node-selector.tsx:96–234  ·  view source on GitHub ↗
({
  open,
  onOpenChange,
  children
}: NodeSelectorProps)

Source from the content-addressed store, hash-verified

94};
95
96export function NodeSelector({
97 open,
98 onOpenChange,
99 children
100}: NodeSelectorProps) {
101 const { setNodes, getNodes, screenToFlowPosition } = useReactFlow();
102
103 const handleNodeSelect = useCallback((selection: NodeTypeOption) => {
104 // Check if trying to add a manual trigger when one already exists
105 if (selection.type === NodeType.MANUAL_TRIGGER) {
106 const nodes = getNodes();
107 const hasManualTrigger = nodes.some(
108 (node) => node.type === NodeType.MANUAL_TRIGGER,
109 );
110
111 if (hasManualTrigger) {
112 toast.error("Only one manual trigger is allowed per workflow");
113 return;
114 }
115 }
116
117 setNodes((nodes) => {
118 const hasInitialTrigger = nodes.some(
119 (node) => node.type === NodeType.INITIAL,
120 );
121
122 const centerX = window.innerWidth / 2;
123 const centerY = window.innerHeight / 2;
124
125 const flowPosition = screenToFlowPosition({
126 x: centerX + (Math.random() - 0.5) * 200,
127 y: centerY + (Math.random() - 0.5) * 200,
128 });
129
130 const newNode = {
131 id: createId(),
132 data: {},
133 position: flowPosition,
134 type: selection.type,
135 };
136
137 if (hasInitialTrigger) {
138 return [newNode];
139 }
140
141 return [...nodes, newNode];
142 });
143
144 onOpenChange(false);
145 }, [
146 setNodes,
147 getNodes,
148 onOpenChange,
149 screenToFlowPosition,
150 ]);
151
152 return (
153 <Sheet open={open} onOpenChange={onOpenChange}>

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected