import { useEffect, useState } from 'react' import { type SortingState, flexRender, getCoreRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table' import { type Admin } from '@/types/admins.types' import { type Pagination } from '@/types/common.types' import { cn } from '@/lib/utils' import { type NavigateFn, useTableUrlState } from '@/hooks/use-table-url-state' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table' import { DataTablePagination } from '@/components/data-table' import { adminsColumns as columns } from './admins-columns' type AdminsTableProps = { data: Admin[] paginationData?: Pagination search: Record navigate: NavigateFn } export function AdminsTable({ data, paginationData, search, navigate, }: AdminsTableProps) { const [sorting, setSorting] = useState([]) const { pagination, onPaginationChange, ensurePageInRange } = useTableUrlState({ search, navigate, pagination: { defaultPage: 1, defaultPageSize: 10 }, globalFilter: { enabled: false }, }) // eslint-disable-next-line react-hooks/incompatible-library const table = useReactTable({ data, columns, state: { sorting, pagination }, pageCount: paginationData?.last_page ?? -1, manualPagination: true, onPaginationChange, onSortingChange: setSorting, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), }) useEffect(() => { ensurePageInRange(table.getPageCount()) }, [table, ensurePageInRange]) return (
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( {header.isPlaceholder ? null : flexRender( header.column.columnDef.header, header.getContext() )} ))} ))} {table.getRowModel().rows.length ? ( table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( {flexRender( cell.column.columnDef.cell, cell.getContext() )} ))} )) ) : ( نتیجه‌ای یافت نشد. )}
) }