import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { fetchCliTargets } from "../../services/api"; import { queryKeys } from "../../constants/queryKeys"; import { useI18n } from "../../i18n"; import { pageCount } from "../../utils/display"; const PAGE_SIZE = 50; function connectStatusClass(status: string | null | undefined): string { const s = String(status || "").trim().toLowerCase(); if (!s || s === "-" || s === "unknown") return "pt-list-status--unknown"; if (s.includes("fail") || s.includes("down") || s.includes("error")) return "pt-list-status--down"; if (s.includes("ok") || s.includes("up") || s.includes("connected") || s.includes("success")) { return "pt-list-status--ok"; } return "pt-list-status--other"; } /** Read-only inventory of managed + UME NEs for Network Management. */ export function NetworkDevicesPage() { const { t } = useI18n(); const [keyword, setKeyword] = useState(""); const [source, setSource] = useState<"all" | "managed" | "ume">("all"); const [page, setPage] = useState(1); const listQuery = useQuery({ queryKey: queryKeys.cliTargets(`${source}:${keyword}`, page, PAGE_SIZE), queryFn: () => fetchCliTargets({ source, keyword, page, pageSize: PAGE_SIZE }), staleTime: 5000, }); const items = listQuery.data?.items ?? []; const total = Number(listQuery.data?.total || 0); const pages = pageCount(total, PAGE_SIZE); const hasFilters = Boolean(keyword.trim() || source !== "all"); return (

{t("networkDevices.title")}

{ setKeyword(e.target.value); setPage(1); }} />
{listQuery.isLoading ?

{t("common.refreshing")}

: null} {!items.length && !listQuery.isLoading ? (

{t("networkDevices.empty")}

) : (
{items.map((row) => ( ))}
{t("networkDevices.col.source")} {t("networkDevices.col.name")} IP {t("networkDevices.col.vendor")} {t("networkDevices.col.deviceType")} {t("networkDevices.col.connect")}
{row.source} {row.name || row.id} {row.ip_address || "—"} {row.vendor || "—"} {row.device_type || row.ne_type || "—"} {row.connect_status || "—"}
)}
{t("common.pagerMeta", { total: String(total), page: String(page), pages: String(pages), })}
); }