"use client" import { useEffect, useState } from "react" import Link from "next/link" import { ChevronDownIcon } from "lucide-react" import { OpsPanel } from "@/components/ops-panel" import { Alert, AlertDescription, AlertTitle } from "@/components/reui/alert" import { buttonVariants } from "@/components/ui/button" import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible" import { cn } from "@/lib/utils" import type { InternetPathViewModel } from "@/lib/dashboard-internet-path" import { InternetPathMapCanvas } from "@/components/dashboard/internet-path-map" import { InternetPathSummary } from "@/components/dashboard/internet-path-summary" const PATH_MAP_OPEN_LS = "mm:dashboard-path-map-open" function readMapOpen(): boolean { if (typeof window === "undefined") return true try { const raw = localStorage.getItem(PATH_MAP_OPEN_LS) if (raw === "0") return false if (raw === "1") return true } catch { /* ignore */ } return true } export function InternetPathPanel({ model, loading, error, }: { model: InternetPathViewModel | null loading?: boolean error?: string | null }) { const [open, setOpen] = useState(true) const [hydrated, setHydrated] = useState(false) useEffect(() => { queueMicrotask(() => { setOpen(readMapOpen()) setHydrated(true) }) }, []) function handleOpenChange(next: boolean) { setOpen(next) try { localStorage.setItem(PATH_MAP_OPEN_LS, next ? "1" : "0") } catch { /* ignore */ } } return ( Карта сети → } contentClassName="flex flex-col gap-3 px-5 pb-4" > {error ? ( Не удалось загрузить путь {error} ) : null} {loading && !model ? (
) : ( )} {open ? "Скрыть карту" : "Показать карту"} ) }