import React, { useState, useEffect, useRef } from "react"; import { HostManagerViewer } from "@/ui/desktop/apps/host-manager/HostManagerViewer.tsx"; import { Tabs, TabsContent, TabsList, TabsTrigger, } from "@/components/ui/tabs.tsx"; import { Separator } from "@/components/ui/separator.tsx"; import { HostManagerEditor } from "@/ui/desktop/apps/host-manager/HostManagerEditor.tsx"; import { CredentialsManager } from "@/ui/desktop/apps/credentials/CredentialsManager.tsx"; import { CredentialEditor } from "@/ui/desktop/apps/credentials/CredentialEditor.tsx"; import { useSidebar } from "@/components/ui/sidebar.tsx"; import { useTranslation } from "react-i18next"; import type { SSHHost, HostManagerProps } from "../../../types/index"; export function HostManager({ isTopbarOpen, initialTab = "host_viewer", hostConfig, rightSidebarOpen = false, rightSidebarWidth = 300, }: HostManagerProps): React.ReactElement { const { t } = useTranslation(); const [activeTab, setActiveTab] = useState(initialTab); const [editingHost, setEditingHost] = useState( hostConfig || null, ); const [editingCredential, setEditingCredential] = useState<{ id: number; name?: string; username: string; } | null>(null); const { state: sidebarState } = useSidebar(); const ignoreNextHostConfigChangeRef = useRef(false); const lastProcessedHostIdRef = useRef(undefined); useEffect(() => { if (initialTab) { setActiveTab(initialTab); } }, [initialTab]); const handleEditHost = (host: SSHHost) => { setEditingHost(host); setActiveTab("add_host"); lastProcessedHostIdRef.current = host.id; }; const handleFormSubmit = () => { ignoreNextHostConfigChangeRef.current = true; setEditingHost(null); setActiveTab("host_viewer"); setTimeout(() => { lastProcessedHostIdRef.current = undefined; }, 500); }; const handleEditCredential = (credential: { id: number; name?: string; username: string; }) => { setEditingCredential(credential); setActiveTab("add_credential"); }; const handleCredentialFormSubmit = () => { setEditingCredential(null); setActiveTab("credentials"); }; const handleTabChange = (value: string) => { setActiveTab(value); if (value !== "add_host") { setEditingHost(null); } if (value !== "add_credential") { setEditingCredential(null); } }; const topMarginPx = isTopbarOpen ? 74 : 26; const leftMarginPx = sidebarState === "collapsed" ? 26 : 8; const bottomMarginPx = 8; return (
{t("hosts.hostViewer")} {editingHost ? editingHost.id ? t("hosts.editHost") : t("hosts.cloneHost") : t("hosts.addHost")}
{t("credentials.credentialsViewer")} {editingCredential ? t("credentials.editCredential") : t("credentials.addCredential")}
); }