"use client" import { useMemo } from "react" import { type ColumnDef, getCoreRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table" import { cn } from "@/lib/utils" import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" import { DATA_GRID_CELL_PAD, DATA_GRID_CELL_PAD_FIRST, DATA_GRID_CELL_PAD_LAST, } from "@/components/data-grids/shared/data-grid-layout" import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" import { EmptyState } from "@/components/empty-state" import { NetworkIcon } from "lucide-react" export interface OspfPreviewInterfaceRow { id: string interface: string currentCost: number optimalCost: number score: number pingMs: number dlMbps: number ulMbps: number } interface RouteOptimizerOspfPreviewDataGridProps { rows: OspfPreviewInterfaceRow[] error?: string | null loading?: boolean } function RouteOptimizerOspfPreviewDataGrid({ rows, error, loading, }: RouteOptimizerOspfPreviewDataGridProps) { const columns = useMemo[]>( () => [ { id: "interface", accessorKey: "interface", header: ({ column }) => ( ), cell: ({ row }) => {row.original.interface}, meta: { headerTitle: "Интерфейс", headerClassName: DATA_GRID_CELL_PAD_FIRST, cellClassName: DATA_GRID_CELL_PAD_FIRST, }, }, { id: "cost", accessorKey: "currentCost", header: ({ column }) => , cell: ({ row }) => { const r = row.original return ( {r.currentCost} {" → "} {r.optimalCost} ) }, meta: { headerTitle: "Cost", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, }, { id: "score", accessorKey: "score", header: ({ column }) => , cell: ({ row }) => {row.original.score}, meta: { headerTitle: "Score", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, }, { id: "pingMs", accessorKey: "pingMs", header: ({ column }) => , cell: ({ row }) => {row.original.pingMs}ms, meta: { headerTitle: "Ping", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, }, { id: "speed", header: () => Speed (dl/ul), enableSorting: false, cell: ({ row }) => { const r = row.original return ( ↓{r.dlMbps} / ↑{r.ulMbps} ) }, meta: { headerClassName: DATA_GRID_CELL_PAD_LAST, cellClassName: DATA_GRID_CELL_PAD_LAST }, }, ], [], ) const table = useReactTable({ data: rows, columns, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), getRowId: (row) => row.id, }) if (error) { return (

Ошибка preview: {error}

) } if (!loading && rows.length === 0) { return ( } title="Интерфейсы OSPF не найдены для выбранного сервера" className="border-0 py-6 text-xs" /> ) } return ( ) } export { RouteOptimizerOspfPreviewDataGrid, type RouteOptimizerOspfPreviewDataGridProps }