import {Spin} from 'antd'; import 'antd/lib/table/style'; import {ColumnsType} from 'antd/es/table'; import { createPageContext, createSearchContext, usePage, useTableSearchState, } from '@hooks'; import {PAGE_SIZE_LIST, calcColumnsWidth} from '@utils'; import {ReactElement, useMemo} from 'react'; import {useTable} from './hooks'; import {flexRender} from '@tanstack/react-table'; import css from './index.module.css'; import classNames from 'classnames'; type Props = { columns: ColumnsType; data: T[]; pageContext: ReturnType; searchContext: ReturnType; count: number; rowKey?: string; 'data-testid'?: string; pageSizeList?: string[]; }; function Table>(props: Props): ReactElement { const { columns, data, pageContext, searchContext, count, rowKey, pageSizeList = PAGE_SIZE_LIST, } = props; const [{page, pageSize}, {onPageChange}] = usePage(pageContext); const [isSearching] = useTableSearchState(searchContext); const colWidth = calcColumnsWidth(columns); const scrollX = colWidth > 0 ? {x: colWidth} : void 0; const tableColumns = useMemo( function () { return [ { title: '序号', width: 64, render(_: any, __: any, idx: number) { return idx + 1; }, align: 'center', }, ...columns, ]; }, [columns], ); const {getHeaderGroups, getRowModel, getCenterTotalSize} = useTable( columns, data, ); return (
{getHeaderGroups().map(function ({id, headers}) { return ( {headers.map(header => ( ))} ); })} {getRowModel().rows.map(function ({id, getVisibleCells}) { return ( {getVisibleCells().map(function ({id, column, getContext}) { return ( ); })} ); })}
{header.isPlaceholder ? null : flexRender( header.column.columnDef.header, header.getContext(), )}
{flexRender(column.columnDef.cell, getContext())}
); } export default Table;