"use client" import { useMemo } from "react" import { type ColumnDef, getCoreRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table" import type { IpRange } from "@/lib/data" 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 { FilterIcon, NetworkIcon } from "lucide-react" interface IpRangesDataGridProps { ipRanges: IpRange[] isLoading?: boolean pagination?: boolean } function IpRangesDataGrid({ ipRanges, isLoading, pagination = false }: IpRangesDataGridProps) { const columns = useMemo[]>( () => [ { id: "cidr", accessorKey: "cidr", header: ({ column }) => , cell: ({ row }) => {row.original.cidr}, meta: { headerTitle: "CIDR", headerClassName: DATA_GRID_CELL_PAD_FIRST, cellClassName: DATA_GRID_CELL_PAD_FIRST, }, }, { id: "asn", accessorKey: "asn", header: ({ column }) => , cell: ({ row }) => ( {row.original.asn} ), meta: { headerTitle: "ASN", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD, }, }, { id: "country", accessorKey: "country", header: ({ column }) => , cell: ({ row }) => ( {row.original.country} ), meta: { headerTitle: "Страна", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD, }, }, { id: "purpose", accessorKey: "purpose", header: ({ column }) => , cell: ({ row }) => ( {row.original.purpose} ), meta: { headerTitle: "Назначение", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD, }, }, { id: "filter", accessorKey: "filter", header: ({ column }) => , cell: ({ row }) => ( {row.original.filter} ), meta: { headerTitle: "Фильтр", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD, }, }, { id: "updated", accessorKey: "updated", header: ({ column }) => , cell: ({ row }) => {row.original.updated}, meta: { headerTitle: "Обновлён", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD, }, }, { id: "enabled", accessorKey: "enabled", header: ({ column }) => , cell: ({ row }) => ( {row.original.enabled ? "Активен" : "Отключён"} ), meta: { headerTitle: "Статус", headerClassName: DATA_GRID_CELL_PAD_LAST, cellClassName: DATA_GRID_CELL_PAD_LAST, }, }, ], [], ) const table = useReactTable({ data: ipRanges, columns, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), ...(pagination ? { getPaginationRowModel: getPaginationRowModel() } : {}), getRowId: (row) => row.id, }) return ( } title="Нет IP-диапазонов" description="Добавьте CIDR-блоки или импортируйте каталог" className="border-0 py-12" /> } /> ) } export { IpRangesDataGrid, type IpRangesDataGridProps }