"use client" import { useState } from "react" import type { WireGuardPeer } from "@/lib/data" import { cn } from "@/lib/utils" import { Button } from "@/components/ui/button" import { ArrowDownIcon, ArrowUpIcon, CodeXmlIcon, KeyRoundIcon, Trash2Icon, } from "lucide-react" function fmtBytes(n: number | undefined): string { if (n === undefined || !Number.isFinite(n) || n < 0) return "—" if (n >= 1_000_000_000) return `${(n / 1_000_000_000).toFixed(1)} ГБ` if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)} МБ` if (n >= 1_000) return `${(n / 1_000).toFixed(0)} КБ` return `${n} Б` } function truncKey(key: string): string { if (key.length <= 20) return key return `${key.slice(0, 8)}…${key.slice(-8)}` } function peerKey(peer: WireGuardPeer, index: number): string { return peer.id ?? peer.rosId ?? peer.publicKey ?? String(index) } function WireGuardPeersDetail({ peers, interfaceName, onDeletePeer, onExportPeer, }: { peers: WireGuardPeer[] interfaceName: string onDeletePeer?: (peerId: string) => void onExportPeer?: (peerId: string) => void }) { const [page, setPage] = useState(0) const lastPage = Math.max(0, Math.ceil(peers.length / 50) - 1) const currentPage = Math.min(page, lastPage) const offset = currentPage * 50 if (page > lastPage) setPage(lastPage) if (peers.length === 0) { return (
Пиры {offset + 1}–{Math.min(offset + 50, peers.length)} из {peers.length}
{peers.length > 50 &&