import React from 'react'; import { Table } from 'antd'; import type { TableColumnsType } from 'antd'; import { createStyles } from 'antd-style'; const useStyle = createStyles(({ css, token }) => { const { antCls } = token; return { customTable: css` ${antCls}-table { ${antCls}-table-container { ${antCls}-table-body, ${antCls}-table-content { scrollbar-width: thin; scrollbar-color: unset; } } } `, }; }); interface DataType { key: React.Key; name: string; age: number; street: string; building: string; number: number; companyAddress: string; companyName: string; gender: string; } const columns: TableColumnsType = [ { title: 'Name', dataIndex: 'name', key: 'name', width: 100, fixed: 'left', filters: [ { text: 'Joe', value: 'Joe', }, { text: 'John', value: 'John', }, ], onFilter: (value, record) => record.name.indexOf(value as string) === 0, }, { title: 'Other', children: [ { title: 'Age', dataIndex: 'age', key: 'age', width: 150, sorter: (a, b) => a.age - b.age, }, { title: 'Address', children: [ { title: 'Street', dataIndex: 'street', key: 'street', width: 150, }, { title: 'Block', children: [ { title: 'Building', dataIndex: 'building', key: 'building', width: 100, }, { title: 'Door No.', dataIndex: 'number', key: 'number', width: 100, }, ], }, ], }, ], }, { title: 'Company', children: [ { title: 'Company Address', dataIndex: 'companyAddress', key: 'companyAddress', width: 200, }, { title: 'Company Name', dataIndex: 'companyName', key: 'companyName', }, ], }, { title: 'Gender', dataIndex: 'gender', key: 'gender', width: 80, fixed: 'right', }, ]; const dataSource = Array.from({ length: 100 }).map((_, i) => ({ key: i, name: 'John Brown', age: i + 1, street: 'Lake Park', building: 'C', number: 2035, companyAddress: 'Lake Street 42', companyName: 'SoftLake Co', gender: 'M', })); const App: React.FC = () => { const { styles } = useStyle(); return ( className={styles.customTable} columns={columns} dataSource={dataSource} bordered size="middle" scroll={{ x: 'calc(700px + 50%)', y: 47 * 5 }} /> ); }; export default App;