"use client" import { useMemo } from "react" import { CompactDataGrid, type CompactDataGridColumn } from "@/components/data-grids/compact-data-grid" import { formatBytes } from "@/lib/fmt-rate" import { cn } from "@/lib/utils" import type { StatisticsPivotDto } from "@mmapp/contracts/statistics" interface PivotGridRow { id: string label: string total: number [key: string]: string | number } export function StatisticsPivotGrid({ data, onCellClick, isLoading, }: { data: StatisticsPivotDto onCellClick?: (rowId: string, colId: string) => void isLoading?: boolean }) { const rows: PivotGridRow[] = useMemo( () => data.rows.map((r) => { const next: PivotGridRow = { id: r.id, label: r.label, total: r.total } for (const col of data.columns) { next[`c:${col.id}`] = r.cells[col.id] ?? 0 } return next }), [data], ) const columns: CompactDataGridColumn[] = [ { id: "label", header: "Измерение", accessorKey: "label", cell: (row) => {row.label}, }, ...data.columns.map((col) => ({ id: `c:${col.id}`, header: col.label, accessorKey: `c:${col.id}` as const, cell: (row: PivotGridRow) => { const value = Number(row[`c:${col.id}`] ?? 0) return ( ) }, })), { id: "total", header: "Итого", accessorKey: "total", cell: (row) => ( {data.metric === "packets" ? row.total.toLocaleString("ru-RU") : formatBytes(row.total)} ), }, ] return ( ) }