import React from 'react'; import { Flex, Table, Typography } 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: #eaeaea transparent; scrollbar-gutter: stable; } } } `, }; }); const { Text } = Typography; interface DataType { key: string; name: string; borrow: number; repayment: number; } interface FixedDataType { key: React.Key; name: string; description: string; } const columns: TableColumnsType = [ { title: 'Name', dataIndex: 'name', }, { title: 'Borrow', dataIndex: 'borrow', }, { title: 'Repayment', dataIndex: 'repayment', }, ]; const dataSource: DataType[] = [ { key: '1', name: 'John Brown', borrow: 10, repayment: 33, }, { key: '2', name: 'Jim Green', borrow: 100, repayment: 0, }, { key: '3', name: 'Joe Black', borrow: 10, repayment: 10, }, { key: '4', name: 'Jim Red', borrow: 75, repayment: 45, }, ]; const fixedColumns: TableColumnsType = [ { title: 'Name', dataIndex: 'name', fixed: true, width: 100, }, { title: 'Description', dataIndex: 'description', }, ]; const fixedDataSource = Array.from({ length: 20 }).map((_, i) => ({ key: i, name: ['Light', 'Bamboo', 'Little'][i % 3], description: 'Everything that has a beginning, has an end.', })); const App: React.FC = () => { const { styles } = useStyle(); return ( bordered className={styles.customTable} columns={columns} dataSource={dataSource} pagination={false} summary={(pageData) => { let totalBorrow = 0; let totalRepayment = 0; pageData.forEach(({ borrow, repayment }) => { totalBorrow += borrow; totalRepayment += repayment; }); return ( <> Total {totalBorrow} {totalRepayment} Balance {totalBorrow - totalRepayment} ); }} /> className={styles.customTable} columns={fixedColumns} dataSource={fixedDataSource} pagination={false} scroll={{ x: 2000, y: 500 }} bordered summary={() => ( Summary This is a summary content )} /> ); }; export default App;