"use client"; import { Eye, EyeOff, Loader2, RocketIcon, X } from "lucide-react"; import { useState } from "react"; import { servers as serversApi, Server as ServerType } from "@/lib/api"; function createServerFormState(server?: ServerType) { return { name: server?.name ?? "", ip: server?.ip ?? "", sshPort: server?.sshPort ?? 22, username: server?.username ?? "root", authType: (server?.authType ?? "PASSWORD") as "PASSWORD" | "SSH_KEY", password: "", sshKey: "", location: server?.location ?? "", tags: server?.tags.join(", ") ?? "", }; } interface ServerFormModalProps { server?: ServerType; onClose: () => void; onSaved: (message: string) => void; } export default function ServerFormModal({ server, onClose, onSaved, }: ServerFormModalProps) { const isEdit = Boolean(server); const [form, setForm] = useState(() => createServerFormState(server)); const [showPw, setShowPw] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const submit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); setLoading(true); try { const payload = { name: form.name, ip: form.ip, sshPort: form.sshPort, username: form.username, authType: form.authType, password: form.authType === "PASSWORD" && form.password.trim() ? form.password : undefined, sshKey: form.authType === "SSH_KEY" && form.sshKey.trim() ? form.sshKey : undefined, location: form.location || undefined, tags: form.tags ? form.tags .split(",") .map((t: string) => t.trim()) .filter(Boolean) : undefined, }; if (!isEdit && form.authType === "PASSWORD" && !form.password.trim()) { throw new Error("Password is required for PASSWORD auth type"); } if (!isEdit && form.authType === "SSH_KEY" && !form.sshKey.trim()) { throw new Error("SSH key is required for SSH_KEY auth type"); } if (server) { await serversApi.update(server.id, payload); onSaved(`Server \"${form.name}\" updated successfully`); } else { await serversApi.create(payload); onSaved(`Server \"${form.name}\" added successfully`); } onClose(); } catch (err: unknown) { setError( err instanceof Error ? err.message : `Failed to ${isEdit ? "update" : "add"} server`, ); } finally { setLoading(false); } }; return (

{isEdit ? "Edit Server" : "Add Server"}

{error && (
{error}
)}
setForm({ ...form, name: e.target.value })} placeholder="prod-01" required style={{ width: "100%" }} />
setForm({ ...form, ip: e.target.value })} placeholder="192.168.1.10" required style={{ width: "100%" }} />
setForm({ ...form, sshPort: parseInt(e.target.value) }) } min={1} max={65535} style={{ width: "100%" }} />
setForm({ ...form, username: e.target.value })} placeholder="root" style={{ width: "100%" }} />
{(["PASSWORD", "SSH_KEY"] as const).map((t) => ( ))}
{form.authType === "PASSWORD" && (
setForm({ ...form, password: e.target.value }) } required={!isEdit} style={{ width: "100%", paddingRight: 36 }} />
)} {form.authType === "SSH_KEY" && (