mirror of
https://github.com/ant-design/ant-design.git
synced 2024-12-15 17:19:11 +08:00
70 lines
1.7 KiB
TypeScript
70 lines
1.7 KiB
TypeScript
|
import React, { useState } from 'react';
|
||
|
import { Divider, Table, Checkbox } from 'antd';
|
||
|
import type { CheckboxOptionType, TableColumnsType } from 'antd';
|
||
|
|
||
|
interface DataType {
|
||
|
key: React.Key;
|
||
|
name: string;
|
||
|
age: number;
|
||
|
address: string;
|
||
|
}
|
||
|
|
||
|
const columns: TableColumnsType<DataType> = [
|
||
|
{ title: 'Column 1', dataIndex: 'address', key: '1' },
|
||
|
{ title: 'Column 2', dataIndex: 'address', key: '2' },
|
||
|
{ title: 'Column 3', dataIndex: 'address', key: '3' },
|
||
|
{ title: 'Column 4', dataIndex: 'address', key: '4' },
|
||
|
{ title: 'Column 5', dataIndex: 'address', key: '5' },
|
||
|
{ title: 'Column 6', dataIndex: 'address', key: '6' },
|
||
|
{ title: 'Column 7', dataIndex: 'address', key: '7' },
|
||
|
{ title: 'Column 8', dataIndex: 'address', key: '8' },
|
||
|
];
|
||
|
|
||
|
const data: DataType[] = [
|
||
|
{
|
||
|
key: '1',
|
||
|
name: 'John Brown',
|
||
|
age: 32,
|
||
|
address: 'New York Park',
|
||
|
},
|
||
|
{
|
||
|
key: '2',
|
||
|
name: 'Jim Green',
|
||
|
age: 40,
|
||
|
address: 'London Park',
|
||
|
},
|
||
|
];
|
||
|
|
||
|
const defaultCheckedList = columns.map((item) => item.key as string);
|
||
|
|
||
|
const App: React.FC = () => {
|
||
|
const [checkedList, setCheckedList] = useState(defaultCheckedList);
|
||
|
|
||
|
const options = columns.map(({ key, title }) => ({
|
||
|
label: title,
|
||
|
value: key,
|
||
|
}));
|
||
|
|
||
|
const newColumns = columns.map((item) => ({
|
||
|
...item,
|
||
|
hidden: !checkedList.includes(item.key as string),
|
||
|
}));
|
||
|
|
||
|
return (
|
||
|
<>
|
||
|
<Divider>Columns displayed</Divider>
|
||
|
<Checkbox.Group
|
||
|
value={checkedList}
|
||
|
options={options as CheckboxOptionType[]}
|
||
|
onChange={(value) => {
|
||
|
setCheckedList(value as string[]);
|
||
|
}}
|
||
|
/>
|
||
|
|
||
|
<Table columns={newColumns} dataSource={data} style={{ marginTop: 24 }} />
|
||
|
</>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export default App;
|