// Copyright (c) 2026 Ivan Vasilev // This source code is licensed under the MIT license found in the // LICENSE file in the root directory of this source tree. import { type NodeInfo, genLabel, cmpVersion } from '../lib/shared'; import { IcoRefresh, IcoPlus, IcoTrash, IcoCopy, IcoSettings } from './icons'; // Сервер-бар: карточки серверов (core-локальный и ноды) + «Добавить сервер» и // (на мобильной) перезапуск AWG под ними. Общий для вкладок — показывает // серверы, между которыми переключается содержимое вкладки (пиры / абоненты). // Версия Forgetting на сервере. Нода, которая отстаёт от панели или не сообщает версию // (агент старше 0.3.4), подсвечена: её стоит обновить — install.sh, «Обновить». function versionChip(n: NodeInfo, panel: string | null) { if (n.pending) return null; let tip = '', warn = false; if (!n.version) { warn = true; tip = 'Версия неизвестна: нода старше 0.3.4 — обнови её (install.sh → «Обновить»)'; } else if (panel && !n.local) { const d = cmpVersion(n.version, panel); if (d < 0) { warn = true; tip = `Панель на ${panel} — обнови ноду (install.sh → «Обновить»)`; } else if (d > 0) { warn = true; tip = `Нода новее панели (${panel}) — обнови панель`; } } const chip = ( {n.version ? `v${n.version}` : 'v?.?.?'} ); return tip ? {chip} : chip; } export default function ServerBar({ nodes, serverId, hubEnabled, panelVersion, onSelect, onAdd, onJoin, onDelete, onSettings, onRestartAwg, restarting, showRestart = true, }: { nodes: NodeInfo[]; panelVersion: string | null; serverId: number | null; hubEnabled: boolean; onSelect: (id: number) => void; onAdd: () => void; onJoin: (n: NodeInfo) => void; onDelete: (n: NodeInfo) => void; onSettings: (n: NodeInfo) => void; onRestartAwg: () => void; restarting: boolean; showRestart?: boolean; }) { return (