import { motion } from "framer-motion"; import { Check, Pencil, Plus, Server, Trash2 } from "lucide-react"; import { useState } from "react"; import { SettingsForm } from "@/components/settings/SettingsForm"; import { Button } from "@/components/ui/button"; import { Muted } from "@/components/ui/typography"; import { useInstances } from "@/hooks/useInstances"; import type { Instance } from "@/lib/config"; import { COLOR } from "@/lib/constants"; type Mode = { kind: "list" } | { kind: "create" } | { kind: "edit"; id: string }; interface InstancesManagerProps { onActivated?: () => void; } export function InstancesManager({ onActivated }: InstancesManagerProps) { const { instances, activeId, activate, remove } = useInstances(); const [mode, setMode] = useState({ kind: "list" }); if (mode.kind === "create") { return ( { setMode({ kind: "list" }); onActivated?.(); }} onCancel={instances.length > 0 ? () => setMode({ kind: "list" }) : undefined} hideCancel={instances.length === 0} /> ); } if (mode.kind === "edit") { const target = instances.find((i) => i.id === mode.id); if (!target) return null; return ( setMode({ kind: "list" })} onCancel={() => setMode({ kind: "list" })} /> ); } if (instances.length === 0) { return ( onActivated?.()} hideCancel submitLabel="Save Connection" /> ); } return (
{instances.map((inst) => ( { activate(inst.id); onActivated?.(); }} onEdit={() => setMode({ kind: "edit", id: inst.id })} onDelete={() => remove(inst.id)} /> ))}
); } interface InstanceRowProps { instance: Instance; active: boolean; onActivate: () => void; onEdit: () => void; onDelete: () => void; } function InstanceRow({ instance, active, onActivate, onEdit, onDelete }: InstanceRowProps) { const [confirmingDelete, setConfirmingDelete] = useState(false); return (
{confirmingDelete ? ( ) : ( )}
); }