import type { TopologyDiscoverOut } from "../../types"; import { useI18n } from "../../i18n"; import { openOrFocusModule } from "../../utils/moduleWindows"; export type DiscoverProgress = { index: number; total: number; neName: string; neIp: string; edgesAdded: number; edgesUpdated: number; }; export type DiscoverSummary = { scanned: number; added: number; updated: number; missing: number; failed: number; }; export type TopologyDiscoverPanelProps = { discovering: boolean; discoverProgress: DiscoverProgress; discoverPct: number; discoverReport: TopologyDiscoverOut | null; discoverError: string; hasResults: boolean; discoverSummary: DiscoverSummary; onCancelDiscover: () => void; onClose: () => void; }; export function TopologyDiscoverPanel({ discovering, discoverProgress, discoverPct, discoverReport, discoverError, hasResults, discoverSummary, onCancelDiscover, onClose, }: TopologyDiscoverPanelProps) { const { t } = useI18n(); return (
{t("topology.discoverReport")}
{discovering && discoverProgress.total > 0 ? (
{t("topology.discoverProgressLive") .replace("{{index}}", String(discoverProgress.index)) .replace("{{total}}", String(discoverProgress.total)) .replace("{{name}}", discoverProgress.neName || discoverProgress.neIp || "?")} {discoverPct}%
) : null} {discovering && discoverProgress.total <= 0 ? (

{t("topology.discoverNoTargets")}

) : null} {!discovering && discoverReport && discoverReport.scanned === 0 ? (

{t("topology.discoverNoTargets")}

) : null} {discoverError ?

{discoverError}

: null} {hasResults ? ( <>

{t("topology.discoverSummary") .replace("{{scanned}}", String(discoverSummary.scanned)) .replace("{{added}}", String(discoverSummary.added)) .replace("{{updated}}", String(discoverSummary.updated)) .replace("{{stale}}", String(discoverSummary.missing)) .replace("{{failed}}", String(discoverSummary.failed))}

) : null}
); }