"use client"; import { useState, ReactNode } from "react"; import { Button } from "@/components/ui/button"; import { Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "../ui/textarea"; import { authNode, getNodes, setNodes as updateNodes, } from "@/lib/dockship/node"; export default function AddNode({ children }: { children: ReactNode }) { const [step, setStep] = useState<1 | 2>(1); const [loading, setLoading] = useState(false); const [ip, setIp] = useState(""); const [key, setKey] = useState(""); const [name, setName] = useState(""); const [description, setDescription] = useState(""); const [auth, setAuth] = useState<{ node_id: string; os: string }>(); const authenticateNode = async () => { setLoading(true); try { setAuth(await authNode(ip.trim(), key.trim())); setStep(2); } catch (e) { console.log(e); } finally { setLoading(false); } }; const addNode = async () => { if (!auth) return; const nodes = await getNodes(); await updateNodes([ ...nodes, { node_id: auth.node_id, key, name, description, ip, os: auth.os, labels: [], }, ]); setStep(1); setAuth(undefined); setIp(""); setKey(""); setName(""); setDescription(""); }; return ( {children} {step === 1 && "Add Node"} {step === 2 && "Node Details"} {/* STEP 1: IP & Node Key */} {step === 1 && (
setIp(e.target.value)} placeholder="10.7.1.21" />
setKey(e.target.value)} placeholder="xxxxxxxxxxxxxxxx" />
)} {/* STEP 3: Node Name & Description */} {step === 2 && (
setName(e.target.value)} placeholder="Captain's node" />