| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- 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<string, unknown>
- navigate: NavigateFn
- }
- export function AdminsTable({
- data,
- paginationData,
- search,
- navigate,
- }: AdminsTableProps) {
- const [sorting, setSorting] = useState<SortingState>([])
- 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 (
- <div className='flex flex-1 flex-col gap-4'>
- <div className='overflow-hidden rounded-md border'>
- <Table>
- <TableHeader>
- {table.getHeaderGroups().map((headerGroup) => (
- <TableRow key={headerGroup.id} className='group/row'>
- {headerGroup.headers.map((header) => (
- <TableHead
- key={header.id}
- colSpan={header.colSpan}
- className='bg-background group-hover/row:bg-muted'
- >
- {header.isPlaceholder
- ? null
- : flexRender(
- header.column.columnDef.header,
- header.getContext()
- )}
- </TableHead>
- ))}
- </TableRow>
- ))}
- </TableHeader>
- <TableBody>
- {table.getRowModel().rows.length ? (
- table.getRowModel().rows.map((row) => (
- <TableRow key={row.id} className='group/row'>
- {row.getVisibleCells().map((cell) => (
- <TableCell
- key={cell.id}
- className={cn(
- 'bg-background group-hover/row:bg-muted',
- cell.column.columnDef.meta?.className,
- cell.column.columnDef.meta?.tdClassName
- )}
- >
- {flexRender(
- cell.column.columnDef.cell,
- cell.getContext()
- )}
- </TableCell>
- ))}
- </TableRow>
- ))
- ) : (
- <TableRow>
- <TableCell
- colSpan={columns.length}
- className='h-24 text-center'
- >
- نتیجهای یافت نشد.
- </TableCell>
- </TableRow>
- )}
- </TableBody>
- </Table>
- </div>
- <DataTablePagination table={table} className='mt-auto' />
- </div>
- )
- }
|